C#:搜索并替换txt行

问题描述

| 我正在寻找一种方法,以逗号分隔的txt文件搜索关键字,然后在该行上替换另一个关键字。例如,如果我在大txt文件中包含以下行:
Help,0
我想在txt中找到此行(通过告诉程序寻找第一个单词“'help \'),并将0替换为1表示我已经阅读过一次,因此它看起来像:
Help,1
谢谢     

解决方法

        尝试覆盖同一文件中的数据通常是一个非常糟糕的主意:如果您的代码引发异常,您将得到部分处理的文件;如果搜索目标和替换值的长度不同,则必须重写文件的其余部分。请注意,这些方法不适用于您的特定情况-但最好不要让它成为习惯。 我的建议: 打开输入文件和临时文件(
Path.GetTempFileName
) 处理并写入每一行(
StreamReader.ReadLine
) 完成后,没有错误,将原始文件重命名为origFile.old 将临时文件重命名为原始文件名。 如果出现问题,请删除临时文件并退出。这样,如果发生错误,原始文件将保持不变。     ,        如果要替换“就地”(这意味着您不想使用另一个临时文件),则可以使用FileStream。 您有两种选择,可以在文件流中按
Read
,直到找到所需的文本,然后发出
Write
。请记住,“ 6”在字节级别起作用,因此您需要考虑字符编码。
Encoding.GetString
将进行转换。 或者,您可以搜索文本并记下其位置。然后,您可以打开FileStream并在该位置仅
Seek
。然后您可以发行
Write
。 这可能是最有效的方法,但比幼稚的选择肯定更具挑战性。通过天真​​的实现,您: 将整个文件读入内存(
File.ReadAllText
) 执行替换(
Regex.Replace
) 将其写回磁盘(
File.WriteAllText
) 没有第二个文件,但是您受系统拥有的内存量的束缚。如果您知道您一直在处理小文件,则可以选择这种方法。否则,您需要阅读字符编码和文件流。 这是关于该主题的另一个SO问题(包括示例代码):通过C#在适当位置编辑文本文件