Les Snippets

Connexion

SAVOIR SI DEUX FICHIERS SONT IDENTIQUES

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 29/01/2010 14:27:16 et initié par elguevel [Liste]
Date de mise à jour : 29/06/2010 11:36:58
Vue : 9907
Catégorie(s) : Cryptage, Fichier / Disque, Algorithme
Langage sélectionné : Delphi 5
Langages dispo pour ce code :
- VB 2005, VB 2008
- Delphi 5
- C
- PHP 5
- Voir tous les langages pour ce code snippet



Langage : Delphi 5
Date ajout : 29/06/2010
Posté par Bacterius [Liste]
DateMAJ : 29/06/2010
function CompareFile(const FilePathA, FilePathB: AnsiString): Boolean;
Var
 H1, H2, M1, M2, Size: Longword;
 P1, P2: Pointer;
begin
 P1 := nil;
 P2 := nil;
 M1 := 0;
 M2 := 0;
 H1 := INVALID_HANDLE_VALUE;
 H2 := INVALID_HANDLE_VALUE;
 Result := False;
 try
  H1 := CreateFile(PAnsiChar(FilePathA), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_SEQUENTIAL_SCAN, 0);
  if H1 <> INVALID_HANDLE_VALUE then
   begin
    H2 := CreateFile(PAnsiChar(FilePathB), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_SEQUENTIAL_SCAN, 0);
     if H2 <> INVALID_HANDLE_VALUE then
      begin
       Size := GetFileSize(H1, nil);
       if Size <> GetFileSize(H2, nil) then Exit;
       if Size = 0 then 
       begin 
         Result := True; 
         Exit; 
       end; 
        M1 := CreateFileMapping(H1, nil, PAGE_READONLY, 0, 0, nil);
       if M1 <> 0 then
        begin
         M2 := CreateFileMapping(H2, nil, PAGE_READONLY, 0, 0, nil);
         if M2 <> 0 then
          begin
           P1 := MapViewOfFile(M1, FILE_MAP_READ, 0, 0, 0);
           if P1 <> nil then
            begin
             P2 := MapViewOfFile(M2, FILE_MAP_READ, 0, 0, 0);
             if P2 <> nil then Result := CompareMem(P1, P2, Size);
            end;
          end;
        end;
      end;
   end;
 finally
  if P2 <> nil then UnmapViewOfFile(P2);
  if P1 <> nil then UnmapViewOfFile(P1);
  if M2 <> 0 then CloseHandle(M2);
  if M1 <> 0 then CloseHandle(M1);
  if H2 <> INVALID_HANDLE_VALUE then CloseHandle(H2);
  if H1 <> INVALID_HANDLE_VALUE then CloseHandle(H1);
 end;
end;

Remarque :
Utilise les fichiers mappés en lecture seule et compare la mémoire. Nécessite l'unité Windows. Ca a l'air un peu gros, mais paradoxalement, c'est optimisé et ça ne peut pas échouer ;)

Snippets en rapport avec : File, Fichier, Crc, Checksum, Identique



Codes sources en rapport avec : File, Fichier, Crc, Checksum, Identique

{Visual Basic, VB6, VB.NET, VB 2005} MODIFIER LES EXTENSION DES FICHIERS
Ce programme permet de Modifier les extensions des fichiers selectionnés,par rapport à votre choix.....

{C / C++ / C++.NET} GENERE BMP
Name: GenBMP Copyright: 0.1 Author: Lajouad Rachid Date: 05/12/11 17:35 Description: ...

{C# / C#.NET} CHECK IDENTICAL FILES
Juste un petit code d'avant vacances qui permet de lister les fichiers identiques dans un répertoire...

{C / C++ / C++.NET} [C++] HASH FINDER - CALCULATEUR DE HASH
Me revoilà comme prévu avec cette version C++ avec une interface graphique compatible Windows et Lin...

{} NOM FICHIER
Validation du nom d'un fichier. - Accepte : File.txt | C:\Data\..\.\CodeSSourceS.Regex\MonFichier...

{Visual Basic, VB6, VB.NET, VB 2005} FAT RECOVER : RÉCUPÉRER LES FICHIERS EFFACÉS DE VOS PARTITIONS FAT (CARTE MÉMOIRE ET CO)
Ce code permet de récupérer les fichiers effacés sur les partitions FAT12, FAT16 et FAT32. Pour cela...

{PHP} CLASSE DIRECTORYITERATOR POUR PHP4
Dans le cadre d'un de mes projets, j'utilise la classe PHP 5 DirectoryIterator vraiment utile pour l...

{Visual Basic, VB6, VB.NET, VB 2005} ENREGISTRER ET CHARGER LISTVIEW DANS FICHIER AVEC IMAGE ETC...
Salut a tous, Voici un ptit code pour enregistrer une listview dans un fichier et la recharger de...

{JAVA / J2EE} CLASS FILE UTILITIES / CLASSE UTILITAIRE DE MANIPULATION DE FICHIERS
Petite classe toute bête de manipulation de fichiers, simple mais tellement utile ;) voila, si ça p...

{Visual Basic, VB6, VB.NET, VB 2005} CALCUL CHECKSUM (CRC32) DE FICHIER
Petit exemple de calcul de CRC32 de fichier...