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);
我有一个文本文件:
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);