C#只写了最后一个字符串

时间:2016-05-13 14:28:50

标签: c# streamwriter

我有问题,我正在写一些数据到文件save.txt,但是文件只是我写的最后一项。

这是我的代码:

SetLine("save.txt", Obchod.numbers[0].ToString(), 5);
SetLine("save.txt", Obchod.numbers[1].ToString(), 6);
SetLine("save.txt", Obchod.numbers[2].ToString(), 7);
SetLine("save.txt", Obchod.numbers[3].ToString(), 8);
SetLine("save.txt", Obchod.numbers[4].ToString(), 9);
SetLine("save.txt", Obchod.numbers[5].ToString(), 10);
SetLine("save.txt", Obchod.numbers[6].ToString(), 11); `

void SetLine(string filename, string text, int linenumber)
{
   using (StreamWriter sw = new StreamWriter(@filename, false))
   {
      for (int i = 0; i < linenumber; i++)
      {

      }

      sw.WriteLine(text);
      sw.Close();
   }
}

2 个答案:

答案 0 :(得分:2)

您正在关闭并在每次写入之间重新打开文件。要么保持打开状态,要么指定一个附加到它的参数而不是覆盖(这是默认的)

答案 1 :(得分:2)

您正在将false传递给StreamWriter-constructor,告诉它不要将文字附加到文件中,而是覆盖整个文本。

我想你想要重写一个文本文件,最后一个参数指示应该覆盖哪一行。那应该这样做:

public static void ReplaceLine(string filename, string text, int linenumber)
{
    string[] allLines = File.ReadAllLines(filename);
    if (allLines.Length < linenumber)
        return; // or ArgumentException?
    allLines[linenumber - 1] = text;
    File.WriteAllLines(filename, allLines);
}

但请注意,在循环中使用此方法效率不高,因为它总是将文件加载到内存中,替换一行并重写整个文件。