Peut permettre de trouver rapidement des fichiers identiques

Code : Tout sélectionner
Procedure.s FastHash(file.s,Sample=3,SampleSize=1048576)
;/ Default = hash @ 1/3 1/2 2/3 with sample of 1Mb
Size.q=FileSize(file)
If Size>Size/(Sample+1)*Sample+SampleSize; Check buffer size
fid=ReadFile(#PB_Any,file)
If fid
*buffer=AllocateMemory(SampleSize)
For n=1 To Sample
;/ Hash the Sample
FileSeek(fid,Size/(Sample+1)*n)
ReadData(fid,*buffer,SampleSize)
Hash.s+MD5Fingerprint(*buffer,SampleSize)
Next
;/ Add file size to hash
Hash+Str(Size)
;/ free buffer & file
FreeMemory(*buffer)
CloseFile(fid)
ProcedureReturn MD5Fingerprint(@Hash,Len(Hash))
EndIf
EndIf
EndProcedure
fichier.s="Z:\yyyyyyy.avi"
start=ElapsedMilliseconds()
Fast$ = "FastHash "+FastHash(fichier)+" en "+Str(ElapsedMilliseconds()-start)+" ms"
start=ElapsedMilliseconds()
Md5$ = "MD5 "+MD5FileFingerprint(fichier)+ " en "+Str(ElapsedMilliseconds()-start)+" ms"
MessageRequester("Resultat", Fast$ + Chr(10) + Md5$, 0)