[英]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.