C# 用常数时间覆盖文本文件的前几行

C# overwrite first few lines of a text file with constant time

我有一个文本文件:

FIRST LINE
SECOND LINE
THIRD LINE
...

我想覆盖文件的第一行,例如。 "2345" 使用 StreamWriter,我只能将文件覆盖为:

2345

using (StreamWriter newWriter = new StreamWriter(playingFileDirectory, false)){ 
    newWriter.WriteLine("2345");
}

FIRST LINE
SECOND LINE
THIRD LINE
...
2345

using (StreamWriter newWriter = new StreamWriter(playingFileDirectory, true)){ 
    newWriter.WriteLine("2345");
}

然而我想要的结果是:

2345
SECOND LINE
THIRD LINE
...

有什么快速的方法(线性时间)吗?我有一些文本需要在用户按下按钮时更新。数据库记录包含 100,000 行。我只想像在文本编辑器中那样更改第一行,而不是更改一行并重写整个文件。

我不认为这是开箱即用的。我建议执行以下操作:

  • 打开输出文件进行写入;
  • 写下你的前几行;
  • 打开输入文件进行读取;
  • 读到你需要的行;
  • 从输入中读取行并将其写入输出;
  • 两者都关闭。

如有需要,可先移动输入文件,将输出文件写入原位置。

如果文件很大,我建议不要使用 File.ReadAllLines。它会对你的记忆力产生巨大的影响。

读写文件的行数:

    var allLines = File.ReadAllLines("MyFile");
    allLines[0] = "2345";

    File.WriteAllLines("MyFile", allLines);

我认为应该这样做:

var lines = System.IO.File.ReadAllLines("YOUR_PATH");

lines[0] = "2345";

System.IO.File.WriteAllLines("YOUR_PATH", lines);

Read all lines method

Write all lines method