しかし、実際に完全に転送せずにファイルサイズを取得するにはどうすればよいですか?この情報を通話と一緒にヘッダーとして送信できることはわかっていますが、この方法は使いたくありません。
最初にバイトストリームのサイズをパイプに送信する必要があります。他の方法はありません。(とにかくそれがすべて行うであろういくつかの作り付けの方法があった場合)
ストリームの前に追加するのはそれほど複雑ではありません。
var bytes = File.ReadAllBytes("somefile.txt");
stream.Write(BitConverter.GetBytes((Int32)bytes.Length), 0, 4);
stream.Write(bytes, 0, bytes.Length);
次に、ストリームを読み取るときに反対側に:
byte[] fileLengthBytes =new byte[4];
stream.Read(fileLengthBytes, 0, 4);
int length = BitConverter.ToInt32(fileLengthBytes, 0);
//you know the size of the file now, log it or show the user
var fileBytes = new byte[length];
stream.Read(fileBytes, 0, fileBytes.Length);
これは単なる例byte[]
です。ストリームが大きい場合は、バッファを作成したくない場合があります。