有一些标准的工具可以做到这一点,但我需要一个简单的GUI来帮助一些用户(在windows上)。他们将看到一个打开的文件对话框,并选择要处理的文件。
该文件将是一个XML文件。该文件将包含一个文本字符串(在前几行内),该字符串需要删除或替换为空格(与哪一行无关)。
问题是XML文件有几个千兆字节大小,但是固定的搜索和替换字符串将出现在前4k左右。
最好的方法是覆盖搜索字符串并保存在原地,而不需要将全部内容读取到内存中或过度写入磁盘?
发布于 2009-04-07 10:38:30
显然,用空格替换,这样整个文件的大小就不会发生变化,这是最好的选择,否则您必须在整个文件中进行流式处理才能在磁盘上更新。
如果这适用于Unix环境,我会考虑使用mmap()将文件开头的适当部分映射到内存中,然后就地编辑并完成。
This snippet展示了如何使用与Win32等效的CreateFileMapping()函数。
发布于 2009-04-07 10:36:10
您可以很容易地编写自己的工具。如果它是在最开始的时候,那么任何暴力的方法都会起作用。只要继续扫描直到你找到它。
但是,只有在不更改文件大小的情况下,才能避免大量的磁盘写入。如果您希望在中间某处删除或插入字节,则必须覆盖它们后面的所有字节。在你的案例中实际上就是所有的文件。所以你必须用空格来代替它。只要用一个字节替换另一个字节,就不会有任何开销。
https://stackoverflow.com/questions/724998
复制相似问题