在我的应用程序中,我使用StreamWriter将数据流式传输到文件。在调用Close()方法之前是否有实际写入文件的字节?如果答案是否定的,那么不管这个数据流有多大都是真的吗?C#StreamWriter - 何时将流物理写入文件?
兰迪
在我的应用程序中,我使用StreamWriter将数据流式传输到文件。在调用Close()方法之前是否有实际写入文件的字节?如果答案是否定的,那么不管这个数据流有多大都是真的吗?C#StreamWriter - 何时将流物理写入文件?
兰迪
StreamWriter有一个内部缓冲区,一旦该缓冲区已满,它将被刷新到磁盘。你可以通过调用Flush()
随时强制它刷新到磁盘。如果你愿意,你可以指定在StreamWriters的构造函数中有多大的缓冲区。
流写的是StreamWriter.Flush
。
我不会downvote,但这不完全正确。是的,'Flush'就可以做到这一点,但这肯定不是关闭前写入流的* only *时间。请看Matt Greer的回答。 – 2010-01-04 19:35:27
即你可以强制它写入,但它也可以通过设置AutoFlush()以及如果在发出刷新之前填充内部缓冲区来写入。 – GrayWizardx 2010-01-04 19:35:43
它取决于正在使用的底层流,该流中缓冲区的大小以及其他因素。
您可以通过调用StreamWriter上的flush()来强制写入底层流。
我从你的问题中假设你正在使用下面的文件流。根据我的经验,刷新通常发生在每1-4K数据之间,但我不确定确切点是什么。
Flush()不保证实际写入磁盘 - 它只是将CLR缓冲区刷新到OS缓冲区。看[这个问题](http://stackoverflow.com/questions/383324/how-to-ensure-all-data-has-been-physically-written-to-disk)。 – bavaza 2014-09-09 13:53:13