高效的在线搜索和替换大文件

时间:2009-04-07 10:31:05

标签: search performance replace inline

有一些标准工具可以做到这一点,但我需要一个简单的GUI来帮助一些用户(在Windows上)。他们将获得一个打开的文件对话框并选择要处理的文件。

该文件将是一个XML文件。该文件将包含(在前几行内)一个需要删除或替换为空格的文本字符串(无关紧要)。

问题是XML文件大几千兆字节,但固定的搜索和替换字符串将在前4k左右发生。

在不需要将全部内容读入内存或过度写入磁盘的情况下,覆盖搜索字符串并保存到位的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

显然用空格替换所以整个文件的大小不会改变是最好的选择,否则你必须流过整个文件来更新磁盘。

如果这是针对Unix环境的,我会考虑使用mmap()将文件开头的合适部分映射到RAM中,然后就地编辑并完成。

This snippet显示了如何使用Win32等效函数CreateFileMapping()函数。

答案 1 :(得分:0)

您可以轻松编写自己的工具。如果它刚刚开始,那么任何强力的approch都会起作用。继续扫描直到找到它。

但是,只有在不更改文件大小的情况下才能避免大量磁盘写入。如果您希望在中间某处删除或插入字节,则必须覆盖它们之后的所有内容。在你的情况下,几乎所有的文件。所以你必须用空格替换它。只要你只用一个字节替换另一个字节,就没有开销。