FileStream Data Incomplete when Converting MemoryStream to FileStream
我正在尝试使用从数据库检索的数据创建制表符分隔的文件。 使用MemoryStream创建StreamWriter并对其进行写入的方法似乎可以正常工作-" while(rdr.Read())"循环执行约40次。 但是,当我找到将MemoryStream转换为FileStream的方法时,生成的制表符分隔的文件仅显示34行,而第34行甚至不完整。 某种限制了输出。 数据本身也没有发现任何会导致其突然终止的错误。
这是转换方法:
1 2 3 4 5 6 7 8 9 10 11 | protected internal static void ConvertMemoryStreamToFileStream(MemoryStream ms, String newFilePath){ using (FileStream fs = File.OpenWrite(newFilePath)){ const int blockSize = 1024; var buffer = new byte[blockSize]; int numBytes; ms.Seek(0, SeekOrigin.Begin); while ((numBytes = ms.Read(buffer, 0, blockSize)) > 0){ fs.Write(buffer, 0, numBytes); } } } |
感谢您提供任何帮助。
自己找到解决方案,因为没有人会提供帮助。 :(
在将数据写入MemoryStream的方法中,您需要在开始将其变成FileStream的方法之前将其添加到最后(其中streamWriter是写入到MemoryStream的StreamWriter):
1 | streamWriter.Flush(); |
显然,这意味着将所有"缓冲"数据添加到流中。 处理内存很烂。
如果这使用的是.Net 4.0+,则可以使用新的
1 2 3 4 5 | ms.Seek(0, SeekOrigin.Begin); using (var output = File.OpenWrite(newFilePath)) { ms.CopyTo(output); } |
放置