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