从源文本文件中的某个位置开始追加一个文本文件

本文关键字:文件 文本 追加 一个 开始 位置 | 更新日期: 2023-09-27 17:58:50

我想在另一个文本文件(比如"original.txt")中附加一个文本(比如"append.txt"从"match"字符串在"original.txt"文件中的位置。

我面临的问题是:

  1. 我无法在内存中加载整个文件,因为这些文件最多可以达到100MB。因此,我决定使用StreamReader和StreamWriter,使用ReadLine和WriteLine进行逐行追加,并获取目标字符串在一行中的位置,以确定从哪里开始追加过程。这是最好的方法吗?

  2. 我不希望使用第三个临时文件(比如"temporary.txt")来获得最终文本,然后将"original.txt"替换为"temporary.txt",因为文件大小传输较大。是否可以不使用第三个临时文件?

我当前的代码是:

StreamReader TextFile = new StreamReader("original.txt");
StreamReader TextFileAppend = new StreamReader("append.txt");
StreamWriter TextFileTemp = new StreamWriter("temporary.txt");
sLine = TextFile.ReadLine();
while (!string.IsNullOrEmpty(sLine) && !TextFile.EndOfStream && !sLine.Contains("match"))
{
    TextFileTemp.WriteLine(sLine);
    sLine = TextFile.ReadLine();
    TextFileTemp.WriteLine(sLine);
}
TextFile.Close();
sLine = TextFileAppend.ReadLine();
while (!string.IsNullOrEmpty(sLine) && !TextFileAppend.EndOfStream)
{
    sLine = TextFileAppend.ReadLine();
    TextFileTemp.WriteLine(sLine);
}
TextFileTemp.Close();
TextFileAppend.Close();
File.Copy("temporary.txt", "original.txt", true);

上面的代码运行良好,但需要一个临时的第三个文件来保存合并后的内容,然后用合并后的文本文件替换"original.txt"。

代码中没有任何错误,但我想知道是否可以从某个位置而不是从末尾附加文件?

从源文本文件中的某个位置开始追加一个文本文件

首先,100 Mb并不超出将整个文件内容读入字符串的范围,然后使用内存中的函数可以加快速度。重要的是,像这样操作大型字符串可能会很慢。

试试这个:

string originalContents = File.ReadAllText("original.txt");
string insertContents = File.ReadAllText("append.txt");
int index = originalContents .IndexOf("match");
if (index == -1) return;
FileStream stream = new FileStream("original.txt", FileMode.Open);
stream.Position = index;
byte[] insertBytes = Encoding.ASCII.GetBytes(insertContents);
stream.Write(insertBytes);
byte[] endBytes = Encoding.ASCII.GetBytes(originalContents.Substring(index));
stream.Write(endBytes);