2009-09-20 35 views
25

Estoy buscando una biblioteca de C o C++ diff. Sé que puedo usar la herramienta Unix diff en combinación con system o exec, pero realmente quiero una biblioteca. Sería útil si la biblioteca pudiera realizar parches también, como la herramienta Unix patch.¿Hay alguna forma de diferenciar archivos de C++?

+0

Me parece que una biblioteca de diferencias sería bastante común, pero Google aún tiene que dar una buena respuesta. –

+0

[Se proporcionó un enfoque excelente para C/C++ en una publicación similar.] (Https://stackoverflow.com/questions/42377443/diff-compare-two-files-by-file-descriptor-fd-instead-of- nombre-archivo/42380790 # 42380790) – DevNull

Respuesta

21

creo que he encontrado una buena solución, por último:

El DTL - Diff Template Library --- Tutorial

Es compatible con parche. Tuve que escribir "diff.cpp" en Google para encontrarlo. ¡Espero que funcione!

+1

¡Esto funcionó muy bien para mí! – KeatsKelleher

11

Parece que el Google Diff, Match and Patch libraries es lo que necesita.

+0

Eh, pero la versión C++ de esa biblioteca depende de Qt. Necesito una biblioteca de diff/patch para una aplicación que no sea GUI. –

+1

Qt tiene partes que no son de GUI, y puede usarse en una aplicación de consola. – Bill

+11

Qt es una gran dependencia de la biblioteca que no quiero tener. ¿Por qué el autor no usó STL? –

3

This es una implementación de una "solución a SES/LCS con el refinamiento espacio lineal Hirschberg como se describe en la siguiente publicación":

E. Myers, `` Un O (ND) Diferencia Algoritmo y sus variaciones, '' Algorithmica 1, 2 (1986), 251-266. http://www.cs.arizona.edu/people/gene/PAPERS/diff.ps

encontró en la Wikipedia page on diff.

Eso es solo para encontrar un diff, sin aplicarlo como un parche. Creo que la aplicación de un parche es en realidad un problema más difícil; debido al riesgo de conflictos Necesitaría alguna forma de mecanismo de retroalimentación que controle al usuario, para resolver conflictos.

+0

Esto es lo mejor que respondo hasta ahora, pero realmente me gustaría una biblioteca de parches también. Esperaré un poco para ver si alguien más tiene una respuesta. –

+0

El archivo 'diff.c' vinculado al principio parece haber desaparecido. (Todavía está en el índice de Google ...) – Tanuva

+0

@Tanuva Huh? Esto funciona para mi. – unwind

1

También bastante indescifrable en Google, resulta que Gnulib tiene un diff module. Este parece suficiente para lo que yo quería una biblioteca diff. Sin embargo, no parece tener un módulo de parche.

Cuestiones relacionadas