关于c#:将MemoryStream转换为FileStream时FileStream数据不完整

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+,则可以使用新的Stream.CopyTo接口:

1
2
3
4
5
ms.Seek(0, SeekOrigin.Begin);
using (var output = File.OpenWrite(newFilePath))
{
    ms.CopyTo(output);
}

放置output时,将刷新数据。