使用StreamWriter将行附加到文件

我想追加行到我的文件。 我正在使用StreamWriter:

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

我的文件的输出应该是几个string,但是我只有一行,每次运行此代码时都会被覆盖。

有什么办法让StreamWriter追加到现有的文件?

用这个代替:

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

有了这个StreamWriter构造函数的重载,您可以select追加或覆盖文件。

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); } 

我假设你每次写文件的时候都执行上面的所有代码。 每次打开文件stream时,它的seek指针都位于开始位置,所以所有的写操作最终都会覆盖之前的内容。

你可以用两种方法解决问题:或者方便

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

或者自己明确地重新定位stream指针:

 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(); 

replace这个:

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

有了这个:

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

true表示它附加文本。

使用此StreamWriter构造函数与第二个参数 – true

另一种select是使用System.IO.File.AppendText

这相当于其他人给出的StreamWriter重载。

另外File.AppendAllText可以给一个稍微简单的接口,而不必担心打开和closuresstream。 虽然您可能需要担心自己的换线问题。 🙂

其实只有乔恩的回答(9月5日在11点31分)与BaseStream.Seek工作我的情况。 谢谢乔恩! 我需要附加到一个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"); } } } 

更简单的方法是使用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"); } 

replace这一行:

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

与此代码:

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

然后把你的行写到这个文本文件中:

 sw.WriteLine("text content");