C# - 当append设置为false时,StreamWriter附加到文件

时间:2017-11-05 14:09:20

标签: c# append streamwriter

我正在处理一个写入.txt文件的简单控制台应用程序。我有几个Streamwriters的append设置为false:

StreamWriter j1 = new StreamWriter(@"jmeno1.txt", false);
StreamWriter j2 = new StreamWriter(@"jmeno2.txt", false);
StreamWriter s1 = new StreamWriter(@"skore1.txt", false);
StreamWriter s2 = new StreamWriter(@"skore2.txt", false);
StreamWriter l1 = new StreamWriter(@"legy1.txt", false);
StreamWriter l2 = new StreamWriter(@"legy2.txt", false);

首先我写下默认值:

string jmeno1;
string jmeno2;
int legy1 = 0;
int legy2 = 0;
int skore1 = 501;
int skore2 = 501;
Console.WriteLine("První jméno?");
jmeno1 = Console.ReadLine();
Console.WriteLine("Druhé jméno?");
jmeno2 = Console.ReadLine();

j1.WriteLine(jmeno1);
j2.WriteLine(jmeno2);
s1.WriteLine(skore1.ToString());
s2.WriteLine(skore2.ToString());
l1.WriteLine(legy1.ToString());
l2.WriteLine(legy2.ToString());
j1.Flush();
j2.Flush();
s1.Flush();
s2.Flush();
l1.Flush();
l2.Flush();

然后在一些用户输入之后我想用新字符串覆盖这些文件(使用与默认字符串相同的方式)。但文件没有被覆盖,文本只是被追加。我发现这很奇怪,因为append设置为false。我以前从没经历过这种情况。

这里是编写文件的代码部分(对不起外语):

Console.WriteLine("\n" + jmeno1 + " hodil/a?");
skore1 = skore1 - int.Parse(Console.ReadLine());

if (skore1 == 0)
{
    legy1++;

    // writing to file
    l1.WriteLine(legy1.ToString());
    l1.Flush();

    Console.WriteLine("\n" + jmeno1 + " zavřel/a!");
    skore1 = 501;                                       
    skore2 = 501;

    // writing to file
    s1.WriteLine(skore1.ToString());
    s2.WriteLine(skore2.ToString());

    s1.Flush();
    s2.Flush();
    zacina = 2;
}

else
{
    // writing to file
    s1.WriteLine(skore1.ToString());
    s1.Flush();

    Console.WriteLine("\n" + jmeno2 + " hodil/a?");
    skore2 = skore2 - int.Parse(Console.ReadLine());

    if (skore2 == 0)
    {
        legy2++;

        // writing to file
        l2.WriteLine(legy2.ToString());
        l2.Flush();

        Console.WriteLine("\n" + jmeno2 + " zavřel/a!");
        skore1 = 501;
        skore2 = 501;

        // writing to file
        s1.WriteLine(skore1.ToString());
        s2.WriteLine(skore2.ToString());
        s1.Flush();
        s2.Flush();

        zacina = 2;
    }

    else
    {
        // writing to file
        s2.WriteLine(skore2.ToString());
        s2.Flush();
    }
}

分数的文件看起来像this

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的代码(在撰写本文时尚不完整)显示了一个错误的假设,即appending模式StreamWriter(让我们称之为SR)的意思。一旦打开文件并且SR写入第一行后跟SR.Flush,您只需将文本写入文件,将高级FileStream位置写入文本的字节长度,并将包含文本的刷新缓冲区写入磁盘。下一次调用SR.WriteLine会在同一个文件中写下一行,从最后FileStrea.Position开始,而不会覆盖任何内容。

StreamWriter附加到文件的选项仅意味着当您下次使用StreamWriter打开同一文件时,它会将文本附加到现有内容。相反,使用选项not append会创建新的空文件,该文件将覆盖以前存在于该文件中的任何现有内容。有关bool append构造函数参数的MSDN文档说明如下:

  

<强>追加   Type: System.Boolean   如果要将数据附加到文件,则为true; false覆盖文件。如果指定的文件不存在,则此参数无效,构造函数将创建新文件。