Чтение двоичных данных из 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,
Лейф
Ответы
Ответ 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);
}
}