从Console.In读取二进制数据

时间:2009-10-13 19:28:11

标签: c#

有没有办法从C#中的stdin读取二进制数据?

在我的问题中,我有一个程序,它启动并在stdin上接收二进制数据。 基本上:     C:>myImageReader < someImage.jpg

我想编写一个类似的程序:

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

然而,Console.In不是Stream,它是TextReader。 (如果我尝试读取char [],TextReader会解释数据,不允许我访问原始字节。)

任何人都对如何获取实际二进制输入有了一个好主意?

干杯, 雷夫

2 个答案:

答案 0 :(得分:25)

要读取二进制文件,最好的方法是使用原始输入流 - 这里显示stdin和stdout之间的“echo”:

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);
      }
   }
}

答案 1 :(得分:1)

如何使用指定文件路径名的参数并在代码中打开二进制输入文件?

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);
    }
}