“就地”替换文件中的一行 - C#

时间:2010-07-19 09:11:18

标签: c# replace

  

可能重复:
  Editing a text file in place through C#

我需要替换一个非常大的文件中的一行,所以我不想readAll和writeAll - 我想到达需要替换,替换和关闭文件的行。 知道如何在C#中做到这一点吗?

谢谢!

3 个答案:

答案 0 :(得分:8)

真的,你有两个选择,第一个有一些严格的限制,第二个是最简单的,可能是你想要的。

  1. 打开文件进行读写访问, 逐行读取文件, 记住的位置 你刚看过的当前行 (StreamReader.BaseStream.pos)。如果 这是替换和。的行 新线完全一样 长度如旧,寻求回归 该行的开头并写。
  2. 打开文件,读取每一行,写入 到新文件,不要写行 被替换,但写下新的一行 代替。然后继续阅读& 写作直到完成。
  3. 第二个选项是很多更简单,可能更快(你需要配置文件以确定),并且它没有新行完全相同的长度作为旧的限制。

    选择选项2

    P.S。摆脱使用ReadAll WriteAll函数的习惯,它们对现实世界的应用程序不利。 “读一行,处理一行”成语同样适用于100k和100TB的文件。 。 。 100TB文件显然需要更长的时间:)

    P.P.S虽然选项1听起来很直接,但实际上很难正确实现,有100个小问题可能出错。可变字节大小,不同编码等。选项2听起来很简单。

答案 1 :(得分:3)

简短回答:你没有。 从一个文件读取并写入另一个文件会更容易,更快。

答案 2 :(得分:-1)

如果您的新字符串与旧字符串的长度相同,则可以将其写入相应的文件位置。如果它更短,你可以通过用空格扩展它来“破解”它...但如果它更长,你必须从该位置重写文件到结尾(文件的开头保持不变)。另一方面,如果你必须替换的部分非常大,将替换文件流式传输到另一个文件确实更快。