我有一个带有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()之间的内容,因为它可能会被部分破坏。
答案 0 :(得分:0)
基本上我不希望读者能够读取Flush()之间的内容,因为它可能会被部分破坏。
我认为你有一个开放的流。 有一个作家和一个读者。 在完成冲洗之前,读者不应阅读。
您需要使用在刷新呼叫后释放的手动锁定机制。 您可以在线实现,或者如果经常使用,您可以创建一个线程安全的流。