【问题标题】:Is there any way to open a file using a diff without patching the original?有没有办法在不修补原始文件的情况下使用差异打开文件?
【发布时间】:2013-03-21 22:42:50
【问题描述】:

例如,我有一个 40Mb 的文件,我想对其进行一些小的更改,可能是 20Kb 的更改。

我可以在结果文件和原始文件之间创建差异,很简单,可以通过使用进行更改的应用程序手动编写它,或者同时获取原始文件和结果文件并从中生成差异(以 Rabin 的多项式指纹算法为例)...

问题是,为了读取该差异(新文件)的有效结果,我必须将差异修补到原始文件并创建生成的新文件并读取...这将创建 2 个 40mb 文件它们之间只有 20kb 的差异。似乎合乎逻辑的是,可以将初始文件与 diff 结合使用并解析(无论如何读取)生成的最终文件,而无需创建它的全新副本。

我已经查看了 xdiff,它具有创建 diff 给定 2 个文件的功能,或者将 diff 作为补丁应用到文件,但是当提供原始文件和 diff 时,没有获得简单文件句柄的功能文件。

这样的事情存在吗?这对于节省较大文件的存储空间非常有帮助,即使仅用于只读(写入操作可能会写入新的差异)。

任何语言的示例都可以,尽管 c、python 或 php 如果随时可用的话会很棒。

【问题讨论】:

    标签: file file-io diff patch file-handling


    【解决方案1】:

    使用 TortoiseMerge 查看差异:

    您可以使用 TortoiseMerge 来查看差异,而无需创建补丁。

    这是overview 的样子。我还附上了guidedownload link。如果这不适合您,这里有一个很棒的 alternative diff tools 列表。

    进一步考虑:

    根据您进行更改的频率以及您对节省文件大小的兴趣,您可能需要考虑使用version control system(也许您已经这样做了)。常用选项包括SVNGitMercurial

    【讨论】:

      【解决方案2】:

      您所描述的是具有增量存储的源代码控制:您存储文件的多个版本,并保存增量,然后您可以请求动态重组的整个文件,因此您可以选择直接访问它们(例如使用适当的库),或在访问前保存在本地。

      搜索 Subversion、git、mercurial 等,了解它们如何实现增量存储,您将获得工作示例。 Git 在内部有一项维护任务,当它认为有利可图时使用增量存储。 Git 是用 C 语言编写的。

      很明显,它将提供一个示例,说明如何按顺序访问此类文件。一旦你知道编写补丁相对简单,并且如果可以有效地访问补丁命令列表,你也可以构建一个随机访问解决方案(只要补丁的文字部分和原始部分是可访问的)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-24
        • 2023-03-30
        • 2020-09-12
        • 2017-07-18
        • 2020-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多