有没有办法使用差异打开文件而不修补原始文件?

时间:2013-03-21 22:42:50

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

示例,我有一个40Mb的文件,我想对它进行一些细微的更改,可能是20Kb的更改。

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

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

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

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

任何语言的例子都没问题,但是如果c,python或php会很好用的话。

2 个答案:

答案 0 :(得分:0)

使用TortoiseMerge查看Diffs:

您可以使用TortoiseMerge在不创建补丁的情况下查看差异。

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

进一步考虑:

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

答案 1 :(得分:0)

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

搜索Subversion,git,mercurial等,它们如何实现delta存储,你将有工作示例。 Git有一项内部维护任务,在认为有利可图时使用增量存储。 Git是用C编程的。

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