使用 StreamWriter 向文件追加行

我想在我的文件后面添加行。我正在使用一个 StreamWriter:

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

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

是否有一些方法可以让 StreamWriter 附加到现有的文件?

429537 次浏览

用这个代替:

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

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

C # 4及以上版本提供了以下语法,有些人认为这些语法更易读:

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

取而代之的是:

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

用这个:

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

true表示它追加文本。

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

使用带有第二个参数 -true这个 StreamWriter构造函数

试试这个:

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

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

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

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

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

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

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

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

此外,文件可以提供一个稍微简单的接口,而不必担心打开和关闭流。虽然你可能需要担心把你自己的分界线。:)

实际上只有 Jon 的回答是 BaseStream (9月5日11日9:37)。搜索在我的案子里起了作用。谢谢 Jon!我需要 附录行到一个压缩存档的文本文件。

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 sw = new StreamWriter("c:/file.txt");

用这个密码:

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

然后像这样把你的代码写到文本文件中:

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

你可以这样用

 using (System.IO.StreamWriter file =new System.IO.StreamWriter(FilePath,true))
{
                    

                    

`file.Write("SOme Text TO Write" + Environment.NewLine);
                    

}