为什么我不能使用StreamWriter向文件追加一行?

时间:2014-07-22 22:46:52

标签: c#

为什么我的程序会覆盖文件中的同一行?

我希望每次使用StreamWriter时都记录一行。

String path = @"c:\Observer\Employer\Employer.txt";
TextWriter write1 = new StreamWriter(path);

if (!File.Exists(path))
{
    File.Create(path);
    TextWriter write2 = new StreamWriter(path);
    write2.WriteLine(Info);
    write2.Close();
}
else if (File.Exists(path))
{
    write1.WriteLine(Info);
    write1.Close();
}

write1.Close();

3 个答案:

答案 0 :(得分:5)

默认情况下,您使用的重载会覆盖该文件。以下是封面内容:

public StreamWriter(String path) 
    : this(path, false, UTF8NoBOM, DefaultBufferSize) {
}

第二个参数告诉它是追加(true)还是覆盖(false)。

您必须明确告诉它将文本附加到文件中:

TextWriter write1 = new StreamWriter(path, true);

答案 1 :(得分:3)

正如@GrantWinney所写,这是预期的行为。无论如何,您可能只想使用

而不是整个代码
File.AppendAllText(path, Info)

代替。它似乎具有您需要的所有功能。见http://msdn.microsoft.com/en-us/library/ms143356.aspx

答案 2 :(得分:0)

您需要在附加模式下打开文件才能添加行。使用可选的第二个参数设置为true,如下所示:

TextWriter write1 = new StreamWriter(path, true);