
Vrei sa compari doua fisiere folosind limbajul C++?
Am realizat un program in C++ care compara 2 fisiere citind simultan cate un caracter din cele doua fisiere si face o comparatie.
V[0] citeste un caracter din file1.txt si V[1] citeste un caracter din file2.txt. Nu putem folosi vectori pentru a retine tot fisierul pentru ca putem avea si fisiere gigant iar memoria este limitata.
Pornim cu logic=1 adica presupunem ca fisierele sunt identice. Daca gasim un contraexemplu vom modifica logic=0.
#include «stdio.h»Desigur, codul de mai sus are un mic bug: daca fisierele sunt identice pana la terminarea unuia iar celalalt mai contine si alte caractere, acestea nu sunt comparate. Programul va afisa eronat 'MD5 identic'.
#include «conio.h»
main(){
unsigned char V[2];
int logic=0;
FILE *f,*g;
f = fopen("file1.txt", "r");
if (f==NULL) {
printf("Error: Unde-i fisierul?\n");
getch();
}
g = fopen("file2.txt", "r");
if (f==NULL) {
printf("Error: Unde-i fisierul?\n");
getch();
}
while((fscanf(f, "%c", &V[0]) != EOF) && (fscanf(g, "%c", &V[1]) != EOF)){
if(V[0]!=V[1]) logic=1;
}
if(logic==0) printf("MD5 identic");
else printf("MD5 diferit");
fclose(f);
getch();
}
Exemplu: 12345 si 123456
Va trebui cumva sa aflam cand se termina de citit primul fisier.
Folosim l1 si l2 pentru a determina EOF (end of file) pentru fiecare din fisiere.
Daca se termina ambele fisiere si nu s-a gasit nicio diferenta afisam 'MD5 identic'.
Trebuie sa iesim din while() asa ca punem logic=0 dar marcam schimbarea logic din 1 in 0 cu un logic2.
Insa daca logic2 ramane neschimbat dupa while inseamna ca fisierele sunt diferite.
#include «stdio.h»Cred ca algoritmul poate fi imbunatatit dar deocamdata atat am reusit. Sper sa fie util cuiva.
#include «conio.h»
main(){
unsigned char v[2];
int logic=1, l1=0,l2=0, logic2=0;
FILE *f,*g;
f = fopen("file1.txt", "r");
if (f==NULL) {
printf("Error: Unde-i fisierul?\n");
getch();
}
g = fopen("file2.txt", "r");
if (f==NULL) {
printf("Error: Unde-i fisierul?\n");
getch();
}
while(logic){
if( fscanf(f, "%c", &v[0])==EOF ) l1=1;
if( fscanf(g, "%c", &v[1])==EOF ) l2=1;
if(v[1]!=v[0]) logic=0;
if(l1!=l2) logic=0;
if(l1==1 && l2==1 && logic==1) {printf("MD5 identic");
logic=0;
logic2=1;}
}
if(logic2==0) printf("MD5 diferit");
fclose(f);
getch();
}
Nu e in niciun caz calcul de MD5 dar asa mi s-a parut frumos sa afiseze. :D
PS: Daca dati copy paste, aveti grija la headere, am pus semnele « » pentru a fi afisat corespunzator.
E primul articol de programare pe blog, poate vor urma si altele.





