2011-09-26 170 views
0

我試圖使用從數據庫中檢索的數據創建制表符分隔文件。使用MemoryStream創建StreamWriter並寫入它的方法似乎工作正常 - 「while(rdr.Read())」循環執行約40次。但是當我將MemoryStream轉換爲FileStream的方法時,生成的製表符分隔文件只顯示34行,第34行甚至不完整。有些東西正在限制產量。沒有看到數據本身會導致它突然終止的任何錯誤。將MemoryStream轉換爲FileStream時FileStream數據不完整

這裏的轉換方法:

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); 
      } 
     } 
    } 

任何和所有幫助表示讚賞,謝謝。

回答

1

自己找到了解決方案,因爲沒有人會幫忙。 :(

在將數據寫入MemoryStream的方法,你就需要這種啓動方法,把它變成一個FileStream(其中的StreamWriter是的StreamWriter寫入MemoryStream的)前添加到了最後:

streamWriter.Flush(); 

顯然,這增加了所有的「緩衝」的數據流,這意味着什麼使用內存吸

+1

您忘了添加語言標籤 - c#?.似乎沒有人看到這個問題。 – oers

0

如果正在使用的.Net 4.0及以上版本,你可以使用新的Stream.CopyTo接口:。

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

當處置了output時,數據將被刷新。