Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 有没有办法使用diff打开文件而不修补原始文件?_File_File Io_Diff_Patch_File Handling - Fatal编程技术网

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

File 有没有办法使用diff打开文件而不修补原始文件?,file,file-io,diff,patch,file-handling,File,File Io,Diff,Patch,File Handling,例如,我有一个40Mb的文件,我想对它做一些小的更改,可能是20Kb的更改 我可以在生成的文件和原始文件之间创建一个差异,非常简单,可以使用正在进行更改的应用程序手动编写,也可以同时获取原始文件和生成的文件并从中生成差异(例如使用Rabin的多项式指纹算法) 问题是,为了读取该差异(新文件)的有效结果,我必须将该差异修补到原始文件,并创建生成的新文件,然后读取该文件。。。这将创建2个40mb的文件,它们之间的差异仅为20kb。似乎合乎逻辑的是,可以将初始文件与diff结合使用,并解析(无论如何都

例如,我有一个40Mb的文件,我想对它做一些小的更改,可能是20Kb的更改

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

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

我已经浏览了xdiff,它的功能是在给定2个文件的情况下创建一个diff,或者将diff作为补丁应用于一个文件,但是在提供原始文件和diff文件时,没有一个功能可以获得简单的文件句柄

这样的事情存在吗?这将极大地有助于在较大文件上节省存储空间,即使只用于只读(写入操作可能会写入新的diff)

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

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

这是一张照片,看起来像什么。我还附上了和。如果这不适合你,这里有一个很好的清单

进一步审议:
根据你经常做的改变和你对文件大小的兴趣的节省,你可能想考虑使用A(也许你已经这么做了)。常见选项包括和。

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

搜索Subversion、git、mercurial等,了解它们是如何实现其增量存储的,您将看到一些有用的示例。Git有一个内部维护任务来完成这一任务,在它认为有利可图时使用delta存储。Git是用C语言编程的

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