web-dev-qa-db-ja.com

C ++からファイルを比較する方法はありますか?

CまたはC++のdiffライブラリを探しています。 Unix diffツールをsystemまたはexecと組み合わせて使用​​できることは知っていますが、本当にライブラリが必要です。 Unix patchツールのように、ライブラリがパッチも実行できると便利です。

29
Matt Fichman

私は最終的に、良い解決策を見つけたと思います:

DTL --Diffテンプレートライブラリ --- チュートリアル

パッチをサポートします。それを見つけるためにGoogleに「diff.cpp」と入力する必要がありました。うまくいけばうまくいきます!

22
Matt Fichman

Google Diff、Match、Patchライブラリ が必要なようです。

11
Paul Biggar

This は、「次の出版物で説明されているように、ヒルシュベルク線形空間の改良によるSES/LCSのソリューション」の実装です。

E.マイヤーズ、「An O(ND) Difference Algorithm and its Variables」、Algorithmica 1、2(1986)、251-266。 http:// www。 cs.arizona.edu/people/gene/PAPERS/diff.ps

diffのウィキペディアページ で見つかりました。

ただし、これは差分を見つけるためだけのものであり、パッチとして適用するためのものではありません。パッチの適用は実際にはもっと難しい問題だと思います。衝突のリスクがあるため。競合を解決するには、何らかの形のユーザー制御フィードバックメカニズムが必要になります。

3
unwind

Mercurial の一部であるものがあります。 Python拡張機能として設計されたCコードとして存在しますが、おそらくかなり簡単に抽出できます。バイナリ差分も実行できると思います。

関連する.cファイルは Mercurial/bdiff.cMercurial/mpatch.c そしておそらく Mercurial/diffhelpers.c です。

3
Omnifarious

Subversionにはライブラリが含まれています libsvn_diff

2

また、Googleではほとんど見つけることができませんが、Gnulibには diff module があることがわかりました。これは私がdiffライブラリを欲しかったものには十分なようです。ただし、パッチモジュールはないようです。

1
ptomato