我正在寻找一种方法来搜索逗号分隔的txt文件中的关键字,然后替换该确切行上的另一个关键字。例如,如果我在一个大的txt文件中有以下行:
Help, 0
我想在txt中找到这一行(通过告诉程序查找第一个单词'help')并将0替换为1表示我已经读过一次所以它看起来像:
Help, 1
由于
答案 0 :(得分:1)
尝试覆盖同一文件中的数据通常是一个非常糟糕的主意:如果您的代码抛出异常,您将留下部分处理的文件;如果搜索目标和替换值具有不同的长度,则必须重新写入文件的其余部分。请注意,这些并不适用于您的具体情况 - 但最好不要让它成为习惯。
我的建议:
Path.GetTempFileName
)StreamReader.ReadLine
)如果出现问题,请删除临时文件并退出。这样,如果发生错误,原始文件将保持不变。
答案 1 :(得分:0)
如果您想“替换”(意味着您不想使用其他临时文件),那么您可以使用FileStream进行替换。
您有几个选项,您可以通过文件流Read
直到找到所需的文字,然后发出Write
。请记住,FileStream
在字节级别工作,因此您需要考虑字符编码。 Encoding.GetString
会进行转换。
或者,您可以搜索文本,并记下其位置。然后你可以打开一个FileStream,只需Seek
到那个位置。然后,您可以发出Write
。
这可能是最有效的方式,但它绝对比天真的选择更具挑战性。通过简单的实现,您:
File.ReadAllText
)Regex.Replace
)File.WriteAllText
)没有第二个文件,但您受到系统内存量的限制。如果你知道你总是在处理小文件,那么这可能是一个选择。否则,您需要阅读字符编码和文件流。
这是关于该主题的另一个SO问题(包括示例代码):Editing a text file in place through C#