使用StreamWriter将行附加到文件

时间:2011-09-05 09:32:44

标签: c# streamwriter

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

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

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

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

11 个答案:

答案 0 :(得分:253)

请改用:

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

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

C#4及以上版本提供了以下语法,其中一些更具可读性:

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

答案 1 :(得分:140)

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

答案 2 :(得分:12)

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

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

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

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

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

答案 3 :(得分:9)

试试这个:

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

答案 4 :(得分:7)

替换它:

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

用这个:

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

true表示它会附加文字。

答案 5 :(得分:5)

this StreamWriter constructor与第二个参数true一起使用。

答案 6 :(得分:5)

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

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

同样File.AppendAllText可以提供稍微简单的界面,而不必担心打开和关闭流。虽然您可能需要担心放入自己的换行符。 :)

答案 7 :(得分:4)

实际上只有Jon的回答(2011年9月5日9:37)与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");
        }
    }
}

答案 8 :(得分:2)

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

答案 9 :(得分:1)

替换此行:

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

使用此代码:

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

然后将您的行写入文本文件,如下所示:

sw.WriteLine("text content");

答案 10 :(得分:0)

您可以这样使用

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