2011-06-14 89 views
-1

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

Help, 0 

我想找到的TXT这条线(通过讲述节目寻找的第一个字“帮助”)和0与1取代以表明我已经所以它看起来像一次阅读:

Help, 1 

感谢

+2

你的[上一个问题](http://stackoverflow.com/questions/6279503/c-searching-for-a-keyword-in-a-txt-file)没有让你沿着这条路走得足够远吗?这和以前一样,但现在你已经引入了输出。 – 2011-06-14 18:22:15

+0

我已经尝试读取该行,将其存储在数组中,然后使用1而不是0写入新的txt文件。但是我宁愿有一种方法来处理现有文件并在那里执行替换操作 – hWorld 2011-06-14 18:26:23

+0

为什么要写入一个新的文本文件?如果您的读取缓冲区关闭,您可以再次写入同一个文件:S – 2011-06-14 18:40:44

回答

0

如果你想要做的“取代”取代(这意味着你不希望使用另一个,临时文件)那么你会用FileStream这样做。

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

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

这可能是最有效的方式,但它确实比天真选项更具挑战性。随着幼稚的做法,您:

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

这里还有一个关于这个专题的SO问题(包括示例代码):Editing a text file in place through C#

1

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

我的建议:

  1. 同时打开输入文件和临时文件(Path.GetTempFileName
  2. 过程,写每一行(StreamReader.ReadLine
  3. 如果没有错误完成后,重命名原始文件东西like origFile.old
  4. 将临时文件重命名为原始文件名。

如果出现问题,请删除临时文件并退出。这样,在发生错误时原始文件保持不变。