Reality31600
Messages postés10Date d'inscriptiondimanche 2 mai 2010StatutMembreDernière intervention30 mai 2011
-
21 mars 2011 à 16:36
Reality31600
Messages postés10Date d'inscriptiondimanche 2 mai 2010StatutMembreDernière intervention30 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