Comment obtenir le MD5 / Checksum d'un fichier ? [Résolu]

Reality31600 11 Messages postés dimanche 2 mai 2010Date d'inscription 30 mai 2011 Dernière intervention - 21 mars 2011 à 16:36 - Dernière réponse : Reality31600 11 Messages postés dimanche 2 mai 2010Date d'inscription 30 mai 2011 Dernière intervention
- 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
Afficher la suite 

2 réponses

Répondre au sujet
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 22 mars 2011 à 00:15
+3
Utile
http://www.delphifr.com/codes/MD5-API-CELEBRE-ALGORITHME-HACHAGE-SOUS-DELPHI_40137.aspx

________________________________________________________
besoin de câbles audio, vidèo, informatique pas cher ?
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de f0xi
Reality31600 11 Messages postés dimanche 2 mai 2010Date d'inscription 30 mai 2011 Dernière intervention - 24 mars 2011 à 10:09
0
Utile
Bonjour,

Merci c'est ce que je chercher :D
je penser qu'une fonction exister déjà mais apparemment non
Commenter la réponse de Reality31600

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.