【发布时间】:2014-04-16 19:52:03
【问题描述】:
我想在另一个文本文件(比如“original.txt”)中附加一个文本文件(比如“append.txt”),但不是“original.txt”的最后一行/字符。它应该从“original.txt”中找到的字符串的某个位置(比如说“match”)开始附加。并忽略“match”字符串位置后“original.txt”中的所有其他文本,并开始从“original.txt”文件中“match”字符串的位置附加“append.txt”文件。
我面临的问题是:
我无法将整个文件加载到内存中,因为这些文件可以达到 100 MB。因此,我决定使用 StreamReader 和 StreamWriter 并使用 ReadLine 和 WriteLine 进行逐行追加,并在一行中获取目标字符串的位置以找出从何处开始追加过程。这是最好的方法吗?
我不希望使用第三个临时文件(比如说“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”。
代码没有错,但我想知道是否可以从某个位置而不是从末尾附加文件?
【问题讨论】:
-
临时文件有什么问题?似乎是个好主意,以防有人在您开始应对和完成之前失败......
-
@PeterRitchie 不,没有错,但我想知道文件是否可以从某个位置而不是结尾附加?
标签: c# .net string streamreader streamwriter