簡體   English   中英

使用 StreamWriter 將行附加到文件

[英]Append lines to a file using a StreamWriter

我想將行附加到我的文件中。 我正在使用 StreamWriter:

StreamWriter file2 = new StreamWriter(@"c:\file.txt");
file2.WriteLine(someString);
file2.Close();

我的文件的輸出應該是幾個字符串,但我只有一行,每次運行此代碼時都會被覆蓋。

有沒有辦法讓 StreamWriter 附加到現有文件?

改用這個:

new StreamWriter("c:\\file.txt", true);

通過 StreamWriter 構造函數的重載,您可以選擇是附加文件還是覆蓋它。

C# 4 及更高版本提供以下語法,有些人認為這些語法更具可讀性:

new StreamWriter("c:\\file.txt", append: true);
 using (FileStream fs = new FileStream(fileName,FileMode.Append, FileAccess.Write))
 using (StreamWriter sw = new StreamWriter(fs))
 {
    sw.WriteLine(something);
 }

我假設您每次向文件寫入內容時都在執行上述所有代碼。 每次打開文件的流時,它的查找指針都位於開頭,因此所有寫入最終都會覆蓋之前的內容。

您可以通過兩種方式解決問題:使用方便的

file2 = new StreamWriter("c:/file.txt", true);

或者自己顯式地重新定位流指針:

file2 = new StreamWriter("c:/file.txt");
file2.BaseStream.Seek(0, SeekOrigin.End);

試試這個:

StreamWriter file2 = new StreamWriter(@"c:\file.txt", true);
file2.WriteLine(someString);
file2.Close();

替換這個:

StreamWriter file2 = new StreamWriter("c:/file.txt");

有了這個:

StreamWriter file2 = new StreamWriter("c:/file.txt", true);

true表示它附加文本。

實際上,只有 Jon 對 BaseStream.Seek 的回答(2011 年 9 月 5 日 9:37)適用於我的情況。 謝謝喬恩! 我需要附加到 zip 存檔的 txt 文件。

using (FileStream zipFS = new FileStream(@"c:\Temp\SFImport\test.zip",FileMode.OpenOrCreate))
{
    using (ZipArchive arch = new ZipArchive(zipFS,ZipArchiveMode.Update))
    {
        ZipArchiveEntry entry = arch.GetEntry("testfile.txt");
        if (entry == null)
        {
            entry = arch.CreateEntry("testfile.txt");
        }
        using (StreamWriter sw = new StreamWriter(entry.Open()))
        {
            sw.BaseStream.Seek(0,SeekOrigin.End);
            sw.WriteLine("text content");
        }
    }
}

將此StreamWriter構造函數與第二個參數 - true

另一種選擇是使用System.IO.File.AppendText

這相當於其他人給出的 StreamWriter 重載。

此外File.AppendAllText可能會提供一個稍微簡單的界面,而不必擔心打開和關閉流。 盡管您可能需要擔心放入自己的換行符。 :)

一種更簡單的方法是使用File.AppendText它將 UTF-8 編碼的文本附加到現有文件,或者如果指定的文件不存在並返回System.IO.StreamWriter則附加到新文件

using (System.IO.StreamWriter sw = System.IO.File.AppendText(logFilePath + "log.txt"))
{                                                
    sw.WriteLine("this is a log");
}

替換這一行:

StreamWriter sw = new StreamWriter("c:/file.txt");

使用此代碼:

StreamWriter sw = File.AppendText("c:/file.txt");

然后將您的行寫入文本文件,如下所示:

sw.WriteLine("text content");

你可以這樣使用

 using (System.IO.StreamWriter file =new System.IO.StreamWriter(FilePath,true))
             {
                    
                    
            `file.Write("SOme Text TO Write" + Environment.NewLine);         
                    
             }
        

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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