【发布时间】:2012-08-01 18:05:26
【问题描述】:
背景:
我有以下 WriteFileToStream 函数,旨在完成一项简单的工作:从文件中获取数据并将其复制到 Stream。
我最初使用的是 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);
//}
}
【问题讨论】:
-
通过查看您正在混合的代码 - 您的 代码有错误,可能会将多余的数据写入目的地,而
CopyTo()实际上工作正常。 -
忠告:作为开发人员,这始终是我们的错。它(几乎)从来不是操作系统或框架中的错误。
-
使用 MSDN 示例时,您的控制台输出是什么样的:msdn.microsoft.com/en-us/library/dd782932.aspx
标签: c# filestream