当我在.NET 4.5中使用StreamWriter
和FileStream
向现有文件追加文本时,我遇到了一件有趣的事情(尚未尝试任何更旧的框架)。我尝试了两种方法,其中一种可行而另一种不可行。我想知道这两种方法之间的区别。
两种方法都包含以下代码
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
却成功了呢?
StreamWriter
直到被刷新和使用using
块隐式调用其Dispose
方法时才会实际 写入 任何内容。编辑:请注意,StreamWriter
有一个 AutoFlush 属性,它可能控制此行为,使其在您编写时自动刷新流,我猜默认情况下是false
。 - Chris Sinclair