【发布时间】:2014-05-09 09:18:31
【问题描述】:
我有一个带有 AutoFlush = true 属性的 StreamWriter。但是,当我随机打开它时,我仍然看到该文件仅部分写入。我正在编写一个需要在任何给定时间内完全写入 (JSON) 的文件。
var sw = new StreamWriter("C:\file.txt", true /* append */, Encoding.ASCII) { AutoFlush = true };
sw.WriteLine("....");
// long running (think like a logging application) -- 1000s of seconds
sw.Close();
在 sw.WriteLine() 调用和 sw.Close() 之间,我想打开文件,并且始终保持“正确的数据格式”,即我的行应该是完整的。
当前想法:
将 FileStream(和/或 StreamWriter)的内部缓冲区增加到 128KB。然后每 128KB-1 调用 FileStream 对象上的 .Flush() 。这引出了我的下一个问题,当我调用 Flush() 时,我是否应该在调用它之前获取 Stream.Position 并执行 File.Lock(Position, 128KB-1)?还是 Flush 会解决这个问题?
基本上我不希望读者能够阅读 Flush() 之间的内容,因为它可能会部分损坏。
【问题讨论】:
-
你用的是什么阅读器?流阅读器?
-
阅读器应用未知,即有很多阅读器正在观看该文件。
标签: c# file filestream streamwriter