2009-10-13 10 views
15

Czy istnieje sposób odczytu danych binarnych ze standardowego wejścia w C#?Odczytaj dane binarne z konsoli. W

W moim problemie mam program, który jest uruchamiany i odbiera dane binarne na stdin. Zasadniczo: C:>myImageReader < someImage.jpg

I chciałbym napisać program tak:

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

Jednak Console.In nie jest strumieniem, to TextReader. (I jeśli spróbuję odczytać na char [], TextReader interpretuje dane, nie pozwalając mi uzyskać dostępu do surowych bajtów.)

Ktoś ma dobry pomysł, jak uzyskać dostęp do faktycznego wejścia binarnego?

Cheers, Leif

Odpowiedz

25

Aby odczytać binarny, najlepszym rozwiązaniem jest użycie strumienia wejściowego surowe - tutaj pokazano coś w stylu "echo" między stdin i 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); 
     } 
    } 
} 
+0

Hmm, przyjąłbym, że 'Console.OpenStandardInput()' zwróci 'TextReader' zamiast' Stream '. – Powerlord

+0

Należy jednak pamiętać, że pliki potokowe z wiersza poleceń otwierają je w trybie tekstowym, więc nie można wtedy używać danych binarnych! – Noldorin

+2

Czy naprawdę musimy załączyć standardowy strumień wyjściowy do instrukcji 'using'? – SerG

1

Co za pomocą parametr, który określa ścieżkę do pliku i otwierasz plik do wprowadzania danych binarnych w kodzie?

Powiązane problemy