使用StreamWriter向文件追加行

本文关键字:追加 文件 StreamWriter 使用 | 更新日期: 2023-09-27 18:07:40

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

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

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

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

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

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

你可以用两种方法解决这个问题:要么使用方便的

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的答案(Sep 5 '11 at 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");
        }
    }
}

使用第二个参数trueStreamWriter构造函数

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

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

文件。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);         
                    
             }