在我的應用程序中,我使用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