簡體   English   中英

使用StreamWriter和FileStream寫入txt文件

[英]Writing to txt file with StreamWriter and FileStream

當使用帶有FileStreamStreamWriter將文本附加到.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM