C# 只写最后一个字符串
C# only writed last string
我有问题,我正在将一些数据写入文件 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();
}
}
您在每次写入之间关闭并重新打开文件。保持打开状态或指定一个参数附加到它而不是覆盖(默认)
您正在将 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);
}
但请注意,在循环中使用此方法效率不高,因为它总是将文件加载到内存中,替换一行并重写整个文件。
我有问题,我正在将一些数据写入文件 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();
}
}
您在每次写入之间关闭并重新打开文件。保持打开状态或指定一个参数附加到它而不是覆盖(默认)
您正在将 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);
}
但请注意,在循环中使用此方法效率不高,因为它总是将文件加载到内存中,替换一行并重写整个文件。