【问题标题】:Windows modify text without creating new fileWindows 修改文本而不创建新文件
【发布时间】:2014-01-20 16:01:26
【问题描述】:

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

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

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

【问题讨论】:

  • 我也遇到了这个问题。我真的很想编辑一个文件而不必创建一个新文件,因为我的文件很大。非常感谢任何对此提供一些见解的人!

标签: text replace


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    删除案例的工作方式是找到要删除的第一个字节,然后从那里开始,读取块并将它们写回文件前面适当数量的偏移量,然后在最后,@ 987654322@ 文件末尾的额外字节。

    如果它们因任何原因被中断,或者执行它们的代码没有事先经过很好的测试,这些显然不是安全的操作 - 但它可以完成。购买额外的存储空间以便在写出新文件的同时保留原始文件可能是一项更好的投资。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 2014-04-26
      相关资源
      最近更新 更多