Есть ли способ сравнения файлов из C ++? - PullRequest
29 голосов
/ 20 сентября 2009

Я ищу библиотеку различий в C или C ++. Я знаю, что могу использовать инструмент Unix diff в сочетании с system или exec, но мне очень нужна библиотека. Было бы удобно, если бы библиотека могла также выполнять исправления, например, инструмент Unix patch.

Ответы [ 6 ]

22 голосов
/ 24 сентября 2009

Я думаю, что нашел хорошее решение, наконец:

DTL - библиотека шаблонов различий --- Учебное пособие

Он поддерживает патч. Мне пришлось набрать "diff.cpp" в Google, чтобы найти его. Надеюсь, это работает!

11 голосов
/ 20 сентября 2009

Кажется, вам нужны библиотеки Google Diff, Match и Patch .

3 голосов
/ 29 сентября 2009

Есть один, который является частью Mercurial . Он существует в виде некоторого C-кода, который разработан как расширение Python, но, вероятно, его можно извлечь довольно легко. Я считаю, что это также может делать двоичные различия.

Соответствующие файлы .c: mercurial / bdiff.c , mercurial / mpatch.c и, возможно, mercurial / diffhelpers.c .

3 голосов
/ 24 сентября 2009

Это является реализацией «решения SES / LCS с уточнением линейного пространства Хиршберга, как описано в следующей публикации»:

E. Майерс, `` O (ND) Разница Алгоритм и его вариации Algorithmica 1, 2 (1986), 251-266. http://www.cs.arizona.edu/people/gene/PAPERS/diff.ps

Найден на странице Википедии на diff .

Это только для нахождения различий, но не для применения его в качестве патча. Я думаю, что применение патча на самом деле является более сложной проблемой; из-за риска конфликтов. Для разрешения конфликтов потребуется некоторая форма контролируемого пользователем механизма обратной связи.

2 голосов
/ 28 сентября 2009

Subversion включает в себя библиотеку libsvn_diff.

1 голос
/ 12 сентября 2011

Также в Google это практически невозможно найти, оказалось, что у Gnulib есть diff модуль . Этого, кажется, достаточно для того, для чего мне нужна библиотека diff. Хотя, похоже, у него нет патч-модуля.

...