2014-01-20 96 views
3

我有一个1TB文件,需要用一个简单的修改进行修改:删除第一行或在文件中添加几个字符。由于空间限制,我不能使用重定向到新文件的命令,也不能使用将整个文件加载到内存中的编辑器。Windows在不创建新文件的情况下修改文本

达到此目的的最佳方法是什么?

编辑:迄今为止,我已经找到了最好的工具是放屁http://fart-it.sourceforge.net/但我的文件在UCS-2编码,这个工具似乎并不支持它

+0

我也遇到了这个问题。我真的想编辑一个文件,而不必制作一个新文件,因为我的文件很大。非常感谢谁提供一些洞察力! – user1836155

回答

0

这可以用一些相对简单的C代码(或C++,或者甚至可能是Python或perl或其他)来完成。但是,不会有备份,所以如果它不正确......那么这个文件有多重要呢?

插入案例的想法是使用ftruncate()来扩展文件的大小,以包含新位的空间,然后从文件末尾开始工作(以避免覆盖任何现有的数据),读取一个块并将其写回偏移正确的数量。然后在前面写入新的数据。

删除案例将通过查找您想要删除的第一个字节,并从那里开始,读取块并将它们写回到文件正面的偏移量,然后在最后, ftruncate()超出文件末尾的额外字节数。

这些显然不安全的操作,如果它们因任何原因中断,或者如果执行它们的代码在手之前没有经过充分测试 - 但可以完成。购买额外的存储可以在保留原始文件的同时写出新文件,这可能会是一个相当好的投资。

1

有没有简单的方法以做到这一点任何主流的操作系统/文件系统,因为它们不支持“在文件开始前添加”或“从文件开始删除”操作,只能“追加到文件结尾”和“截断文件”。任何解决方案都需要将整个文件读入内存,并将其写回所需的更改。

相关问题