0

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

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

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

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

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

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

4

2 回答 2

0

使用 TortoiseMerge 查看差异:

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

这是它的外观的概述。我还附上了指南下载链接。如果这不适合您,这里有一个很棒的替代差异工具列表。

进一步考虑:

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

于 2013-03-27T17:37:16.433 回答
0

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

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

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

于 2013-04-05T07:06:10.600 回答