Inhalt von zwei Dateien vergleichen?



  • Hallo,

    ich habe zwei Dateien (akt und sav). Der Inhalt ist in beiden Dateien 111 aber er sagt mir immer der Inhalt ist nicht gleich.

    Ich denke mal ich habe einen Fehler in folgendem Code. Hoffe mir kann vielleicht jemand weiterhelfen...

    int GStatus(const char* VServer)
    {
    	FILE * pFile1;
    	FILE * pFile2;
    	char buffer1[3];
    	char buffer2[3];
    
    	pFile1 = fopen("akt", "r");
    	fread(buffer1, 1, 3, pFile1);
    	printf(buffer1);
    
    	pFile2 = fopen("sav", "r");
    	fread(buffer2, 1, 3, pFile2);
    	printf(buffer2);
    
    	if(buffer1!=buffer2)
    		printf("Sie sind nicht gleich..");
    	if(buffer1==buffer2)
    		printf("Gleich");
    
    	//pFile2 = fopen("sav", "w");
    	//fwrite(buffer1, 1 , 3, pFile2);
    
    	fclose(pFile1);
    	fclose(pFile2);
    
    return 0;
    }
    
    int main()
    {
    
        while(1)
        {
    	GStatus("1");
    	printf("\n");
    
        sleep(2);
        }
    
    return 0;
    }
    

    Danke...



  • cCoder schrieb:

    if(buffer1!=buffer2)
    		printf("Sie sind nicht gleich..");
    	if(buffer1==buffer2)
    		printf("Gleich");
    

    Damit vergleichst Du die Adressen der beiden Buffer. Die sind natürlich verschieden. Du wirst schon ne Schleife über alle Elemente machen müssen und einzeln vergleichen. Das iist übrigens mehr C als C++. In C++ arbeitet man mit streams und strings, damit gehen auch die Vergleiche deutlich leichter.

    MfG Jester



  • Hallo,

    erstmal ist das C, und kein C++. Dann kannst du Arrays auch so nicht vergleichen, sondern musst strcmp benutzen.



  • Danke erstmal für die superschnelle Antwort.
    Ich werde das ganze mal in C++ umformen und Strings verwenden.

    Dann poste ich nochmal..



  • Hallo,

    naja, unter Umständen erledigt sich dein Problem ja dann bereits, denn Strings kannst du mit == bzw. != vergleichen. 🙂



  • Hallo. Ich konnte das Problem jetzt lösen. Ist zwar nicht schön aber es geht 🙂

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <sys/socket.h>
    #include <sys/types.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <netdb.h>
    #include <unistd.h>
    #include <iostream>
    using namespace std;
    
    int GStatus(const char* VAkt, const char* VSav)
    {
    	FILE * pFile1;
    	FILE * pFile2;
    	char buffer1[12];
    	char buffer2[12];
    
    	pFile1 = fopen(VAkt, "r");
    	fread(buffer1, 1, 12, pFile1);
    
    	pFile2 = fopen(VSav, "r");
    	fread(buffer2, 1, 12, pFile2);
    
    	if((string)buffer1==(string)buffer2){
    		printf("Es wurde kein neuer Status in %s empfangen.", VAkt);
    		//system("exec");
    	}
    	pFile2 = fopen(VSav, "w");
    	fwrite(buffer1, 1 , 12, pFile2);
    
    	fclose(pFile1);
    	fclose(pFile2);
    
    return 0;
    }
    
    int main()
    {
    
        while(1)
        {
    		GStatus("1/akt","1/sav");
    		printf("\n");
    
        	sleep(20);
        }
    
    return 0;
    }
    


  • C++

    #include <fstream.h>
    int GStatus(string& VAkt,string& VSav)
    {
       ifstream file1(VAkt.c_str()),file2(VSav.c_str());
       string buffer1,buffer2;
       file1>>buffer1;
       file2>>buffer2;
       if(buffer1==buffer2)
       {
          cout << "Es wurde kein neuer Status in "+VAkt+" empfangen.";
       }
       file1.close();
       file2.close();
    }
    

Anmelden zum Antworten