Comment obtenir le MD5 / Checksum d'un fichier ?

[Résolu]
Signaler
Messages postés
10
Date d'inscription
dimanche 2 mai 2010
Statut
Membre
Dernière intervention
30 mai 2011
-
Messages postés
10
Date d'inscription
dimanche 2 mai 2010
Statut
Membre
Dernière intervention
30 mai 2011
-
Bonjour,

Je sollicite encore votre aide, j'ai besoin de vérifier que des fichiers ont bien été copié
donc je vérifie la taille du fichier source et celle du fichier de destination mais ce n'est pas un moyen très fiable de vérification.

J'ai alors penser à regarder le MD5 du fichier , je procède comme cela :

var
  FichierFlux, FFlux: TFileStream;
     idmd5 : TIdHashMessageDigest5;
   hash : T4x4LongWordRecord;
     teest,teest2: string;
begin
 idmd5 := TIdHashMessageDigest5.Create;

  dest := TElementListe(Liste.Items[compteur]^).destinationfichier + '\' +
    TElementListe(Liste.Items[compteur]^).dossier + ExtractFileName
    (TElementListe(Liste.Items[compteur]^).sourcefichier);
FichierFlux := TFileStream.Create(TElementListe(Liste.Items[compteur]^)
      .sourcefichier, fmOpenRead);
  // Crée une instance de TFileStream, "fmOpenRead" permet d'ouvrir le fichier en lecture seule
  FFlux := TFileStream.Create(dest, fmOpenWrite or fmCreate); // "fmOpenWrite" ouvre le fichier en écriture seulement (remplace le contenu), "fmCreate" permet de créer le fichier si il n'existe pas
 TElementListe(Liste.Items[compteur]^).copie_taille:=fflux.Size;

             teest := idmd5.HashStreamAsHex(FichierFlux) ;
              teest2:=  idmd5.HashStreamAsHex(FFlux) ;
              showmessage(teest);
              showmessage(teest2);
end;


j'ai effacer tous le code source inutile et j'ai garder que le nécessaire pour que ce soit plus clair.
Le soucis c'est que j'obtiens a chaque fois le même MD5 avec des fichiers différent.

Je me suis inspiré de ce code :

//returns MD5 has for a file
 function MD5(const fileName : string) : string;
 var
   idmd5 : TIdHashMessageDigest5;
   fs : TFileStream;
   hash : T4x4LongWordRecord;
 begin
   idmd5 := TIdHashMessageDigest5.Create;
   fs := TFileStream.Create(fileName, fmOpenRead OR fmShareDenyWrite) ;
   try
     result := idmd5.AsHex(idmd5.HashValue(fs)) ;
   finally
     fs.Free;
     idmd5.Free;
   end;
 end;


Sauf que moi je n'ai pas les methodes ".ashex" ou ".hashValue" donc j'ai tester avec des méthodes différentes.

Le MD5 d'un fichier est censé être unique j'ai donc surement une erreur

1 réponse

Messages postés
10
Date d'inscription
dimanche 2 mai 2010
Statut
Membre
Dernière intervention
30 mai 2011

Bonjour,

Merci c'est ce que je chercher :D
je penser qu'une fonction exister déjà mais apparemment non