zwei dateien miteinander vergleichen



  • @peter
    Stimmt, es gibt noch performantere Lösungen. Am schnellsten wärs natürlich, wenn man jedes einzelne Zeichen mit fgetc() einliest und vergleicht. 😉

    @Daniel
    Wo genau liegt das Problem? Weißt du nicht wie man Dateien öffnet, ausliest, schließt, ... oder weißt du nicht wie man Strings mit strcmp() vergleicht?



  • Hallo,

    liess in Bloecken von je 1024 Byte (oder wieviel du eben lesen moechtest. 512 oder
    1024 sind in der Regel ok) und vergleiche sie mittels memcmp();.

    mfg
    v R



  • naja, irgendwie habe ich schon probleme mit dem code. vieleicht könnte einer ein paar zweilen code beifügen.

    vielen dank

    daniel



  • Schau Dir mal diff an. Das ist genau das, was Du suchst... 😉



  • danke dir,

    gibts das aber auch für windows plattformen????

    mfg daniel



  • der vorschlag von virtuell Realisticer war doch ziemlich gut

    ungetestet so ins forum gehackt

    int flag=1,x,y;
    FILE *fp1,*fp2;
    char buffer1[1024];
    char buffer2[1024];
    
    char filename1[]="test.abc"
    char filename2[]="test2.abc"
    
    fp1=fopen(filename1,"rb");
    fp2=fopen(filename2,"rb");
    
    while(!feof(fp1)&&!foef(fp2)&&flag){
    x=fread(buffer1,1,1024,fp1);
    y=fread(buffer2,1,1024,fp2);
    if(x-y)flag=0;else flag=!memcmp(buffer1,buffer2,1024);
    }
    
    flcose(fp1);
    fclose(fp2);
    
    if(flag) //dateien gleich
    else //dateien nicht gleich
    


  • Windalf schrieb:

    if(x-y)flag=0;else flag=!memcmp(buffer1,buffer2,1024);

    *lol* (das x-y ist echt genial)

    ich wuerde das so schreiben:

    if(x!=y || memcmp(buffer1, buffer2, x))
      break;
    


  • @Shade Of Mine
    das ist so ne macke die man sich angwöhnt wenn man manchmal versucht eine funktion zu schreiben die eine aufgabe mit möglichst wenig ascii-zeichen zu verwenden.
    auf www.cplusplus-forum.de haben wir so ne rätselecke wo ein gewisser Oxdeadbeef das sogenannte C-golfen eingeführt hat. es wird irgend ne aufgabe gestellt und der die mit den wenigsten ascii-zeichen löst gewinnt. Ist manchmal erstaunlich was man so alles mit 100 Asciizeichen für funktionalität darstellen kann. (Nur vestehen kanns der lesende dann kaum noch 😃 )

    hmm das hast du ja gleich nen bug bei mir rausgeschossen der mir spontan gar nicht aufgefallen ist. kommt davon wenn man direkt ins forum postet
    die version mit der veroderung ist allerdings eleganter

    greetz Windalf



  • vielen dank an alle die was geschrieben haben. nach dem programm von Windalf
    und der verbesserung von Shade Of Mine funzt das richtig gut. besten dank

    daniel



  • Windalf schrieb:

    @Shade Of Mine
    das ist so ne macke die man sich angwöhnt wenn man manchmal versucht eine funktion zu schreiben die eine aufgabe mit möglichst wenig ascii-zeichen zu verwenden.
    auf www.cplusplus-forum.de haben wir so ne rätselecke wo ein gewisser Oxdeadbeef das sogenannte C-golfen eingeführt hat. es wird irgend ne aufgabe gestellt und der die mit den wenigsten ascii-zeichen löst gewinnt. Ist manchmal erstaunlich was man so alles mit 100 Asciizeichen für funktionalität darstellen kann. (Nur vestehen kanns der lesende dann kaum noch 😃 )

    sowas ist natuerlich hin und wieder lustig, ich wuerde das aber nicht zu exzessiv machen - denn das verdirbt den stil gewaltig (wie du unschwer an dem if(x-y) erkennen kannst)


Anmelden zum Antworten