I'm looking for a C or C++ diff library. I know I can use the Unix diff
tool in combination with system
or exec
, but I really want a library. It would be handy if the library could perform patches as well, like the Unix patch
tool.
I think I've found a good solution, finally:
The DTL - Diff Template Library --- Tutorial
It supports patch. I had to type "diff.cpp" into Google to find it. Hopefully it works!
It seems like the Google Diff, Match and Patch libraries are what you need.
This is an implementation of a "solution to SES/LCS with the Hirschberg linear space refinement as described in the following publication":
E. Myers, ``An O(ND) Difference Algorithm and Its Variations,'' Algorithmica 1, 2 (1986), 251-266. http://www.cs.arizona.edu/people/gene/PAPERS/diff.ps
Found it on the Wikipedia page on diff.
That's only for finding a diff though, not applying it as a patch. I think that application of a patch is actually a harder problem; due to the risk of conflicts. It would need some form of user-controlling feedback mechanism, to resolve conflicts.
There is one that is part of Mercurial. It exists as some C code that's designed as a Python extension, but it could probably be extracted pretty easily. I believe it can also do binary diffs.
The relevant .c files are mercurial/bdiff.c, mercurial/mpatch.c and possibly mercurial/diffhelpers.c.
Subversion includes a library libsvn_diff
.
Also pretty much unfindable in Google, it turns out that Gnulib has a diff module. This one seems sufficient for what I wanted a diff library for. It doesn't seem to have a patch module, though.
来源:https://stackoverflow.com/questions/1451694/is-there-a-way-to-diff-files-from-c