使用StreamWriter将行附加到文件

Way*_*int 162 c# streamwriter

我想在我的文件中附加行.我正在使用StreamWriter:

StreamWriter file2 = new StreamWriter(@"c:\file.txt");
file2.WriteLine(someString);
file2.Close();
Run Code Online (Sandbox Code Playgroud)

我的文件输出应该是几个字符串彼此相同,但我只有一行,每次运行此代码时都会被覆盖.

有没有办法让StreamWriter附加到现有文件?

Øyv*_*hen 267

请改用:

new StreamWriter("c:\\file.txt", true);
Run Code Online (Sandbox Code Playgroud)

使用StreamWriter构造函数的这个重载,您可以选择是附加文件还是覆盖它.

C#4及更高版本提供了以下语法,其中一些更易读:

new StreamWriter("c:\\file.txt", append: true);
Run Code Online (Sandbox Code Playgroud)


And*_*nov 142

 using (FileStream fs = new FileStream(fileName,FileMode.Append, FileAccess.Write))
 using (StreamWriter sw = new StreamWriter(fs))
 {
    sw.WriteLine(something);
 }
Run Code Online (Sandbox Code Playgroud)


Jon*_*Jon 12

我假设您每次向文件写入内容时都在执行上述所有代码.每次打开文件的流时,其搜索指针都位于开头,因此所有写入最终都会覆盖之前的内容.

您可以通过两种方式解决问题:方便

file2 = new StreamWriter("c:/file.txt", true);
Run Code Online (Sandbox Code Playgroud)

或者通过自己显式重新定位流指针:

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


Mar*_*rco 10

试试这个:

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


Waq*_*qas 7

替换这个:

StreamWriter file2 = new StreamWriter("c:/file.txt");
Run Code Online (Sandbox Code Playgroud)

有了这个:

StreamWriter file2 = new StreamWriter("c:/file.txt", true);
Run Code Online (Sandbox Code Playgroud)

true 表示它附加文本.


Kir*_*huk 5

使用StreamWriter构造函数与第二个参数- true.


Chr*_*ris 5

另一个选择是使用System.IO.File.AppendText

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

此外File.AppendAllText可以给出一个稍微容易的界面,而无需担心开闭流.虽然您可能需要担心放入自己的换行符.:)


小智 5

实际上,只有Jon对BaseStream.Seek的回答(11年5月11日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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)