[英]Writing to txt file with StreamWriter and FileStream
當使用帶有FileStream
的StreamWriter
將文本附加到.NET 4.5中的現有文件時(未嘗試任何舊框架),我遇到了一些有趣的事情。 我嘗試了兩種方法,一種方法有效,一種方式無效。 我想知道兩者之間有什么區別。
兩種方法都在頂部包含以下代碼
if (!File.Exists(filepath))
using (File.Create(filepath));
我在using
語句中創建,因為我通過個人經驗發現,這是確保應用程序完全關閉文件的最佳方法。
非工作方法:
using (FileStream f = new FileStream(filepath, FileMode.Append,FileAccess.Write))
(new StreamWriter(f)).WriteLine("somestring");
使用此方法,最終不會將任何內容附加到文件中。
工作方式:
using (FileStream f = new FileStream(filepath, FileMode.Append,FileAccess.Write))
using (StreamWriter s = new StreamWriter(f))
s.WriteLine("somestring");
我做了一些谷歌搜索,不知道要搜索什么,並沒有找到任何信息。 那么,為什么匿名的StreamWriter
在(非匿名的?命名的?) StreamWriter
工作的地方失敗了?
聽起來你沒有沖洗流。
http://msdn.microsoft.com/en-us/library/system.io.stream.flush.aspx
看起來StreamWriter在寫入最終目標(在本例中為文件)之前寫入緩沖區。 您也可以設置AutoFlush屬性,而不必顯式刷新它。
http://msdn.microsoft.com/en-us/library/system.io.streamwriter.autoflush.aspx
要回答你的問題,當你使用“使用”塊時,它會在StreamWriter上調用dispose,而StreamWriter必須依次調用Flush。
兩個代碼片段之間的區別在於using
。 using
語句將對象放在塊的末尾。
StreamWriter
在將數據寫入底層流之前緩沖數據。 處理StreamWriter
刷新緩沖區。 如果不刷新緩沖區,則不會寫入任何內容。
來自MSDN :
您必須調用Close以確保所有數據都正確寫入基礎流。
另請參閱: 我何時應該在C#中使用“使用”塊?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.