Console.In/Out/ErrorはTextReader/TextWriterであり、これはテキストデータの入出力には向いているものの、バイナリデータの入出力には不向きです。 標準ストリームでバイナリデータを扱いたい場合などにはOpenStandardInput/OpenStandardOutput/OpenStandardErrorの各メソッドを使います。
これらのメソッドではそれぞれ標準入力・標準出力・標準エラーに対応するStreamを取得することができます。 取得したStreamを使って直接読み書きをできるほか、取得したStreamからBinaryReader/BinaryWriterを作成してバイナリデータの読み書きを行うといったこともできます。
次の例では、標準入力から読み込んだ画像を水平方向に反転し、標準出力に書き込んでいます。
標準入出力のStreamを取得して画像の読み書きを行う
using System;
using System.Drawing;
using System.Drawing.Imaging;
class Sample {
static void Main()
{
// 標準入力のStreamを取得して画像として読み込む
using (var image = new Bitmap(Console.OpenStandardInput())) {
// 画像を左右反転する
image.RotateFlip(RotateFlipType.RotateNoneFlipX);
// 標準出力のStreamを取得して加工した画像を書き込む
image.Save(Console.OpenStandardOutput(), ImageFormat.Jpeg);
}
}
}
実行例
>sample.exe < sample.jpg > mirror.jpg