Подтвердить что ты не робот

Чтение двоичных данных из Console.In

Есть ли способ читать двоичные данные из stdin в С#?

В моей проблеме у меня есть программа, которая запускается и получает двоичные данные на stdin. В основном:   C:>myImageReader < someImage.jpg

И я бы хотел написать такую ​​программу, как:

static class Program
{
    static void Main()
    {
        Image img = new Bitmap(Console.In);
        ShowImage(img);
    }
}

Однако Console.In не является потоком, это TextReader. (И если я попытаюсь прочитать char [], TextReader интерпретирует данные, не позволяя мне получить доступ к необработанным байтам.)

Кто-нибудь получил хорошую идею о том, как получить доступ к фактическому двоичному входу?

Cheers, Лейф

4b9b3361

Ответ 1

Чтобы прочитать двоичный код, лучший подход - использовать исходный поток ввода - здесь показано что-то вроде "эха" между stdin и stdout:

    using (Stream stdin = Console.OpenStandardInput())
    using (Stream stdout = Console.OpenStandardOutput())
    {
        byte[] buffer = new byte[2048];
        int bytes;
        while ((bytes = stdin.Read(buffer, 0, buffer.Length)) > 0) {
            stdout.Write(buffer, 0, bytes);
        }
    }

Ответ 2

Как использовать параметр, указывающий путь к файлу, и вы открываете файл для двоичного ввода в коде?

static class Program
{
    static int Main(string[] args)
    {
        // Maybe do some validation here
        string imgPath = args[0];

        // Create Method GetBinaryData to return the Image object you're looking for based on the path.
        Image img = GetBinaryData(imgPath);
        ShowImage(img);
    }
}