使用StreamWriter和FileStream写入txt文件
当使用带有FileStream
的StreamWriter
将文本附加到.NET 4.5中的现有文件时(我没有尝试过任何旧的框架),我遇到了一些有趣的事情。 我试过两种方法,一种是有效的,一种是没有的。 我想知道两者之间的区别是什么。
两种方法都在顶部包含以下代码
if (!File.Exists(filepath)) using (File.Create(filepath));
我在using
语句中创建,因为我通过个人经验发现,这是确保应用程序完全关闭文件的最佳方法。
非工作方法:
using (FileStream f = new FileStream(filepath, FileMode.Append,FileAccess.Write)) (new StreamWriter(f)).WriteLine("somestring");
使用此方法,最终不会将任何内容附加到文件中。
工作方式:
using (FileStream f = new FileStream(filepath, FileMode.Append,FileAccess.Write)) using (StreamWriter s = new StreamWriter(f)) s.WriteLine("somestring");
我做了一些谷歌搜索,不知道要搜索什么,并没有找到任何信息。 那么,为什么匿名的StreamWriter
在(非匿名的?命名的?) StreamWriter
工作的地方失败了?
听起来你没有冲洗流。
http://msdn.microsoft.com/en-us/library/system.io.stream.flush.aspx
看起来StreamWriter在写入最终目标(在本例中为文件)之前写入缓冲区。 您也可以设置AutoFlush属性,而不必显式刷新它。
http://msdn.microsoft.com/en-us/library/system.io.streamwriter.autoflush.aspx
要回答您的问题,当您使用“使用”块时,它会调用StreamWriter上的dispose,而StreamWriter必须依次调用Flush。
两个代码片段之间的区别在于using
。 using
语句将对象放在块的末尾。
StreamWriter
在将数据写入基础流之前缓冲数据。 处理StreamWriter
刷新缓冲区。 如果不刷新缓冲区,则不会写入任何内容。
来自MSDN :
您必须调用Close以确保所有数据都正确写入基础流。
另请参阅: 我何时应该在C#中使用“使用”块?