...cel mai bun antivirus!

Antivirus Cloud

Vrei sa stii cum functioneaza un antivirus Cloud? Citeste totul despre Cloud Computing!

Antivirus USB

Scaneaza sistemul cu mai multi antivirusi folosind un stick USB bootabil.

Recomandari Antivirus

Cauti cel mai bun antivirus? Uite aici unul potrivit nevoilor tale!

Cel mai bun Firewall

Recomandari Firewall gratuit si bun. Tine intrusii la distanta!

Windows 7 USB

Instaleaza rapid Windows 7 folosind un stick USB bootabil.

Articol scris de Gigi | 15.02.2011 | 0 comentarii
0

Comparare fisiere in C++

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»
#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();
}
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'.
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»
#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();
}
Cred ca algoritmul poate fi imbunatatit dar deocamdata atat am reusit. Sper sa fie util cuiva.
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.

 
 

Lasa un comentariu: