2009-09-20 8 views
25

Sto cercando una libreria differenziale C o C++. So che posso usare lo strumento Unix diff in combinazione con system o exec, ma voglio davvero una libreria. Sarebbe utile se la libreria potesse eseguire anche le patch, come lo strumento Unix patch.C'è un modo per diffare file da C++?

+0

Mi sembra che una libreria diff sia piuttosto comune, ma Google non ha ancora trovato una buona risposta. –

+0

[Un eccellente approccio è stato fornito per C/C++ su un post simile.] (Https://stackoverflow.com/questions/42377443/diff-compare-two-files-by-file-descriptor-fd-instead-of- nome file/42380790 # 42380790) – DevNull

risposta

21

Credo di aver trovato una buona soluzione, infine:

Il DTL - Diff Template Library --- Tutorial

Esso supporta patch. Ho dovuto digitare "diff.cpp" in Google per trovarlo. Spero che funzioni!

+1

Questo ha funzionato alla grande per me! – KeatsKelleher

11

Sembra che il Google Diff, Match and Patch libraries sono quello che ti serve.

+0

Eh, ma la versione C++ di quella libreria dipende da Qt. Ho bisogno di una libreria diff/patch per un'applicazione non-GUI. –

+1

Qt ha parti non GUI e può essere utilizzato in un'applicazione console. – Bill

+11

Qt è una dipendenza da libreria di grandi dimensioni che non voglio avere. Perché l'autore non ha usato STL? –

3

This è un'implementazione di una "soluzione di SES/LCS con il Hirschberg raffinatezza spazio lineare come descritto nel seguente pubblicazione":

E. Myers, `` Un O (ND) Differenza Algoritmo e le sue varianti, '' Algorithmica 1, 2 (1986), 251-266. http://www.cs.arizona.edu/people/gene/PAPERS/diff.ps

trovato sul Wikipedia page on diff.

Questo è solo per trovare una diff però, non applicandola come patch. Penso che l'applicazione di una patch sia in realtà un problema più difficile; a causa del rischio di conflitti. Avrebbe bisogno di una qualche forma di meccanismo di feedback di controllo degli utenti, per risolvere i conflitti.

+0

Questo è il migliore che risponda finora, ma vorrei davvero anche una libreria di patch. Aspetterò un po 'per vedere se qualcun altro ha una risposta. –

+0

Sembra che il file 'diff.c' collegato all'inizio sia scomparso. (È ancora nell'indice di Google però ...) – Tanuva

+0

@Tanuva Huh? Per me funziona. – unwind

1

anche praticamente introvabile in Google, si scopre che ha un Gnulib diff module. Questo sembra sufficiente per quello che volevo una libreria diff per. Tuttavia, non sembra avere un modulo patch.