![](/img/trans.png)
[英]GZipStream works when writing to FileStream, but not MemoryStream
[英]FileStream Data Incomplete when Converting MemoryStream to FileStream
我正在嘗試使用從數據庫檢索的數據創建制表符分隔的文件。 使用MemoryStream創建StreamWriter並對其進行寫入的方法似乎可以正常工作-“ while(rdr.Read())”循環執行約40次。 但是,當我使用將MemoryStream轉換為FileStream的方法時,生成的制表符分隔的文件僅顯示34行,而第34行甚至不完整。 某種限制了輸出。 數據本身也沒有發現任何會導致其突然終止的錯誤。
這是轉換方法:
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):
streamWriter.Flush();
顯然,這意味着將所有“緩沖”數據添加到流中。 處理內存很爛。
如果使用的是.Net 4.0+,則可以使用新的Stream.CopyTo
接口:
ms.Seek(0, SeekOrigin.Begin);
using (var output = File.OpenWrite(newFilePath))
{
ms.CopyTo(output);
}
處理output
時,將刷新數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.