Есть ли способ отличить файлы от C++?

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


person Matt Fichman    schedule 20.09.2009    source источник
comment
Мне кажется, что библиотека diff была бы довольно распространена, но Google еще не нашел хорошего ответа.   -  person Matt Fichman    schedule 21.09.2009


Ответы (6)


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

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

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

person Matt Fichman    schedule 24.09.2009

Похоже, что вам нужны библиотеки Google Diff, Match и Patch. необходимость.

person Paul Biggar    schedule 20.09.2009
comment
Эх, но версия этой библиотеки на C++ зависит от Qt. Мне нужна библиотека различий/исправлений для приложения без графического интерфейса. - person Matt Fichman; 21.09.2009
comment
Qt имеет части, не связанные с графическим интерфейсом, и может использоваться в консольном приложении. - person Bill; 24.09.2009
comment
Qt — это большая библиотечная зависимость, которую я не хочу иметь. Почему автор не использовал STL? - person Matt Fichman; 30.09.2009
comment
Порт STL доступен на GitHub. - person Josh Kelley; 21.10.2014
comment
Это определенно лучше, чем DTL (который, по-видимому, не предлагает построчного алгоритма сравнения) - person jpo38; 24.11.2016

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

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

Нашел его на странице Википедии о различиях.

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

person unwind    schedule 24.09.2009
comment
Пока это лучший ответ, но мне бы очень хотелось и библиотеку патчей. Я подожду немного, чтобы увидеть, если кто-нибудь еще ответит. - person Matt Fichman; 24.09.2009
comment
Файл diff.c, указанный в начале, исчез. (Хотя он все еще находится в индексе Google...) - person Tanuva; 24.07.2017
comment
@unwind О боже, прости. Это просто транспорт https, который дает ошибку 404. Отключение HTTPS Everywhere приводит к загрузке файла. - person Tanuva; 24.07.2017

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

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

person Omnifarious    schedule 29.09.2009

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

person Martin v. Löwis    schedule 28.09.2009

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

person ptomato    schedule 12.09.2011