Comment obtenir le MD5 / Checksum d'un fichier ?

Résolu
Reality31600 Messages postés 10 Date d'inscription dimanche 2 mai 2010 Statut Membre Dernière intervention 30 mai 2011 - 21 mars 2011 à 16:36
Reality31600 Messages postés 10 Date d'inscription dimanche 2 mai 2010 Statut Membre Dernière intervention 30 mai 2011 - 24 mars 2011 à 10:09
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

Reality31600 Messages postés 10 Date d'inscription dimanche 2 mai 2010 Statut Membre Dernière intervention 30 mai 2011
24 mars 2011 à 10:09
Bonjour,

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