【问题标题】:C# StreamWriter - When is stream physically written to file?C# StreamWriter - 流何时物理写入文件?
【发布时间】:2010-01-04 19:30:38
【问题描述】:

在我的应用程序中,我使用 StreamWriter 将数据流式传输到文件。在调用 Close() 方法之前,是否有任何字节实际写入文件?如果答案是否定的,那么无论流有多大,这都是真的吗?

兰迪

【问题讨论】:

    标签: c#


    【解决方案1】:

    StreamWriter 有一个内部缓冲区,一旦该缓冲区已满,它将被刷新到磁盘。你可以随时调用Flush()强制它刷新到磁盘

    如果您愿意,可以在 StreamWriters 的构造函数中指定所需的缓冲区大小。

    【讨论】:

    • Flush() 不保证实际写入磁盘 - 它只是将 CLR 缓冲区刷新到 OS 缓冲区。见this question
    【解决方案2】:

    Stream 由 StreamWriter.Flush 编写。

    【讨论】:

    • 我不会投反对票,但这并不完全正确。是的,Flush 会这样做,但这肯定不是在关闭之前写入流的唯一时间。请参阅 Matt Greer 的回答。
    • 这就是你如何强制它写入,但也可以通过设置 AutoFlush() 以及如果内部缓冲区在发出刷新之前填充。
    【解决方案3】:

    这取决于正在使用的底层流、该流中缓冲区的大小以及其他因素。

    您可以通过在 StreamWriter 上调用 flush() 来强制写入底层流。

    我从您的问题中假设您正在使用下面的文件流。根据我的经验,刷新通常发生在每 1-4K 数据之间,但我不确定确切的点是什么。

    【讨论】:

      猜你喜欢
      • 2011-10-29
      • 2018-08-24
      • 1970-01-01
      • 2012-06-14
      • 2016-05-03
      • 1970-01-01
      • 2014-02-22
      • 1970-01-01
      • 2011-08-29
      相关资源
      最近更新 更多