C#FileStream - 文件上的读/写器,基于每行 - Flush或FileLock?

时间:2014-03-29 22:34:05

标签: c# file filestream streamwriter

我有一个带有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()之间的内容,因为它可能会被部分破坏。

1 个答案:

答案 0 :(得分:0)

基本上我不希望读者能够读取Flush()之间的内容,因为它可能会被部分破坏。

我认为你有一个开放的流。 有一个作家和一个读者。 在完成冲洗之前,读者不应阅读。

您需要使用在刷新呼叫后释放的手动锁定机制。 您可以在线实现,或者如果经常使用,您可以创建一个线程安全的流。