2013-04-22 82 views
1

是否有任何理由爲什麼這段代碼不應該產生一個帶有Slappy這個詞的內存流?無法創建MemoryStream

private MemoryStream StringBuilderToMemoryStream(StringBuilder source) 
    { 
     MemoryStream memoryStream = new MemoryStream(); 
     StreamWriter streamWriter = new StreamWriter(memoryStream); 
     streamWriter.Write("slappy"); 
     return memoryStream; 
    } 

即使我說streamWriter.Write(source.toString());它失敗。

有趣的是,它可以在調用這個例程的其中一個方法上工作,但不在任何其他方法上。

而我給他們打的訂單也沒有任何區別。

但無論如何,即使當我調用上述,從工作的方法,輸出仍然是一個空的MemoryStream。

有什麼想法?

回答

8

您不需要刷新流寫入器,以避免單詞被寫入內存流。

調用後添加以下streamWriter.Write

streamWriter.Flush(); 

此外,如果您想以後從內存流讀這個詞,一定要重新設定它的位置,因爲它位於後寫後字slappy

memoryStream.Position = 0; 
+0

此外,我們可以設置['AutoFlush'](http://msdn.microsoft.com/en-IN/library/system.io.streamwriter.autoflush.aspx)爲true – V4Vendetta 2013-04-22 05:44:00

+0

1。注意:返回新的MemoryStream(memoryStream.ToArray())(或基於與原始緩衝區相同的緩衝區)可能會更好 - 正確配置'streamWriter'也會處理'memoryStream' ... – 2013-04-22 05:44:32

+0

太棒了。有沒有任何理由,當我有一個5K文件,它會寫出4K,但不是最後的1K。該行爲在使用flush之前。我在那裏做了一個AutoFlush的轉折點? – griegs 2013-04-22 05:46:43

2

如果你不想叫streamWriter.Flush();可以設置的StreamWriter的自動刷新,屬性,在創建它的那一刻。

MemoryStream memoryStream = new MemoryStream(); 
StreamWriter streamWriter = new StreamWriter(memoryStream) 
    { 
     AutoFlush = true 
    } 
+0

是的,我也是。使用這個解決方案的手動選項,因爲它更有意義。 +1和謝謝。 – griegs 2013-04-22 05:52:26