背景:
簡単なジョブを完了するための次の WriteFileToStream 関数があります。ファイルからデータを取得し、ストリームにコピーします。
私はもともと Stream.CopyTo(Stream) メソッドを使用していました。しかし、長いデバッグ プロセスの後、これが処理パイプラインのさらに先にある「破損したデータ」エラーの原因であることがわかりました。
あらすじ:
Stream.CopyTo(Stream) メソッドを使用すると、65536 バイトのデータが生成され、ストリームが正しく処理されません。
Stream.Write(...) メソッドを使用すると、45450 バイトのデータが生成され、ストリームが正しく処理されます。
質問:
CopyTo を次のように使用すると、無関係なデータがストリームに書き込まれる可能性がある理由を誰でも理解できますか?
注意してください: WriteFileToStream の最終的なコードは、この質問への回答から取られたものです: Save and load MemoryStream to/from a file
public static void WriteFileToStream(string fileName, Stream outputStream)
{
FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.Read);
long fileLength = file.Length;
byte[] bytes = new byte[fileLength];
file.Read(bytes, 0, (int)fileLength);
outputStream.Write(bytes, 0, (int)fileLength);
file.Close();
outputStream.Close();
// This was corrupting the data - adding superflous bytes to the result...somehow.
//using (FileStream file = File.OpenRead(fileName))
//{
// //
// file.CopyTo(outputStream);
//}
}