有一些标准工具可以做到这一点,但我需要一个简单的GUI来帮助一些用户(在Windows上)。他们将获得一个打开的文件对话框并选择要处理的文件。
该文件将是一个XML文件。该文件将包含(在前几行内)一个需要删除或替换为空格的文本字符串(无关紧要)。
问题是XML文件大几千兆字节,但固定的搜索和替换字符串将在前4k左右发生。
在不需要将全部内容读入内存或过度写入磁盘的情况下,覆盖搜索字符串并保存到位的最佳方法是什么?
答案 0 :(得分:1)
显然用空格替换所以整个文件的大小不会改变是最好的选择,否则你必须流过整个文件来更新磁盘。
如果这是针对Unix环境的,我会考虑使用mmap()
将文件开头的合适部分映射到RAM中,然后就地编辑并完成。
This snippet显示了如何使用Win32等效函数CreateFileMapping()
函数。
答案 1 :(得分:0)
您可以轻松编写自己的工具。如果它刚刚开始,那么任何强力的approch都会起作用。继续扫描直到找到它。
但是,只有在不更改文件大小的情况下才能避免大量磁盘写入。如果您希望在中间某处删除或插入字节,则必须覆盖它们之后的所有内容。在你的情况下,几乎所有的文件。所以你必须用空格替换它。只要你只用一个字节替换另一个字节,就没有开销。