Windows修改文本而不创建新文件

时间:2014-01-20 16:01:27

标签: text replace

我有一个需要通过简单更改修改的1TB文件:删除第一行或在文件前加几个字符。由于空间限制,我无法使用重定向到新文件的命令或使用将整个文件加载到内存中的编辑器。

实现这一目标的最佳方法是什么?

编辑:到目前为止我找到的最好的工具是FART http://fart-it.sourceforge.net/,但我的文件是用UCS-2编码的,而且这个工具似乎不支持它

2 个答案:

答案 0 :(得分:1)

没有简单的方法可以对任何主流操作系统/文件系统执行此操作,因为它们不支持“前置到文件开头”或“从文件开头删除”操作,只是“附加到文件末尾”和“截断文件”。任何解决方案都需要将整个文件读入内存并将其写回所需的更改。

答案 1 :(得分:0)

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

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

删除情况可以通过查找要删除的内容的第一个字节来启动,然后从那里开始,读取块并将它们向后写回到文件前面适当的数量,然后在最后,{ {1}}文件末尾的额外字节。

如果它们因任何原因而中断,或者如果执行它们的代码未经过充分测试,那么这些操作显然不是安全的操作 - 但是可以这样做。购买额外的存储空间以便在写出新文件时保留原始文件可能是一项相当好的投资。