C#:搜索并替换文本行

时间:2011-06-14 18:15:42

标签: c# text-files

我正在寻找一种方法来搜索逗号分隔的txt文件中的关键字,然后替换该确切行上的另一个关键字。例如,如果我在一个大的txt文件中有以下行:

Help, 0

我想在txt中找到这一行(通过告诉程序查找第一个单词'help')并将0替换为1表示我已经读过一次所以它看起来像:

Help, 1

由于

2 个答案:

答案 0 :(得分:1)

尝试覆盖同一文件中的数据通常是一个非常糟糕的主意:如果您的代码抛出异常,您将留下部分处理的文件;如果搜索目标和替换值具有不同的长度,则必须重新写入文件的其余部分。请注意,这些并不适用于您的具体情况 - 但最好不要让它成为习惯。

我的建议:

  1. 打开输入文件和临时文件(Path.GetTempFileName
  2. 处理并写下每一行(StreamReader.ReadLine
  3. 完成没有错误后,将原始文件重命名为origFile.old
  4. 将临时文件重命名为原始文件名。
  5. 如果出现问题,请删除临时文件并退出。这样,如果发生错误,原始文件将保持不变。

答案 1 :(得分:0)

如果您想“替换”(意味着您不想使用其他临时文件),那么您可以使用FileStream进行替换。

您有几个选项,您可以通过文件流Read直到找到所需的文字,然后发出Write。请记住,FileStream在字节级别工作,因此您需要考虑字符编码。 Encoding.GetString会进行转换。

或者,您可以搜索文本,并记下其位置。然后你可以打开一个FileStream,只需Seek到那个位置。然后,您可以发出Write

这可能是最有效的方式,但它绝对比天真的选择更具挑战性。通过简单的实现,您:

没有第二个文件,但您受到系统内存量的限制。如果你知道你总是在处理小文件,那么这可能是一个选择。否则,您需要阅读字符编码和文件流。

这是关于该主题的另一个SO问题(包括示例代码):Editing a text file in place through C#