2013-04-22 83 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