Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi 2 Verzeichnisse mit Dateien vergleichen (https://www.delphipraxis.net/106336-2-verzeichnisse-mit-dateien-vergleichen.html)

Eppos 9. Jan 2008 12:09


2 Verzeichnisse mit Dateien vergleichen
 
Hallo zusammen,

ich habe folgendes vor. Ein Programm zu schreiben, dass "Verzeichnis 1" und "Verzeichnis 2" ausliest und miteinadner vergleicht, abhängig welches Änderungsdatum die Datei trägt, dann austauscht.

Das Programm öffnet also "Verzeichnis 2" schaut die erste Datei an, z.B. test.jpg, existiert das in "Verzeichnis 1"? Wenn nein, dann soll es dahin kopiert werden.
Wenn ja, ist die aktuelle test.jpg in "Verzeichnis 1" älter, wenn ja, dann ersetzten.

Hat jemand ein paar Code schnipsel für das auslesen eines Verzeichnisses? Und für das auslesen des Änderungsdatums?
Sowie das kopieren und ersetzen?

Viel Dank!

Eppos

Luckie 9. Jan 2008 12:16

Re: 2 Verzeichnisse mit Dateien vergleichen
 
Guck dir mal mein Programm Hier im Forum suchenPegasus an. Das kann genau das. allerdings würde ich nicht das Änderungsdatum benutzen, sondern einen Hash-Wert der Dateien benutzen, das ist sicherer.

mashutu 9. Jan 2008 12:36

Re: 2 Verzeichnisse mit Dateien vergleichen
 
Delphi-Quellcode:
function ProcessFiles(sPath1,sPath2:string):longint;

var
    sr2,
    sr :  TSearchRec;
    iRes2,
    iRes   :  integer;
begin
   result:=0;
   iRes:=SysUtils.FindFirst(sPath+'*.*', $FF, sr);
   while iRes=0 do
   begin
     if sr.Attr and faDirectory =0 then //no subdirs
     begin
         iRes2:=SysUtils.FindFirst(sPath2+sr.name, $FF, sr2);
         if iRes2=0 then
         begin
           //Datei ist im Zielverz. vorhanden
           //hier vergleich o.ae. implementieren
         end
         else
         begin
           //datei fehlt im Ziel kopieren
         end
         findclose(sr2);
     end;

     iRes:=SysUtils.FindNext(sr);
   end;
   findclose(sr);
end;
Mal als Anregung

himitsu 9. Jan 2008 12:48

Re: 2 Verzeichnisse mit Dateien vergleichen
 
@mashutu:
besser auf sr und sr2 achten (so, wie es jetzt ist, gibt's Probleme :zwinker: )

aber zum zweiten FindFirst: FileExists ist auch ganz nett :angel:

Delphi-Quellcode:
function ProcessFiles(sPath1,sPath2:string):longint;

var
    sr :  TSearchRec;
    iRes   :  integer;
begin
   result:=0;
   iRes:=SysUtils.FindFirst(sPath+'*.*', $FF, sr);
   while iRes=0 do
   begin
     if sr.Attr and faDirectory =0 then //no subdirs
     begin
         if FileExists(sPath2+sr.name) then
         begin
           //Datei ist im Zielverz. vorhanden
           //hier vergleich o.ae. implementieren
         end
         else
         begin
           //datei fehlt im Ziel kopieren
         end
     end;
     iRes:=SysUtils.FindNext(sr);
   end;
   findclose(sr);
end;

himitsu 9. Jan 2008 12:51

Re: 2 Verzeichnisse mit Dateien vergleichen
 
Zitat:

Zitat von mashutu
Delphi-Quellcode:
function ProcessFiles(sPath1,sPath2:string):longint;

var
    sr2,
    sr :  TSearchRec;
    iRes2,
    iRes   :  integer;
begin
   result:=0;
   iRes:=SysUtils.FindFirst(sPath+'*.*', $FF, sr);
   while iRes=0 do
   begin
     if sr.Attr and faDirectory =0 then //no subdirs
     begin
         iRes2:=SysUtils.FindFirst(sPath2+sr.name, $FF, sr);
         if iRes2=0 then
         begin
           //Datei ist im Zielverz. vorhanden
           //hier vergleich o.ae. implementieren
         end
         else
         begin
           //datei fehlt im Ziel kopieren
         end
         findclose(sr2);
     end;

     iRes:=SysUtils.FindNext(sr);
   end;
   findclose(sr);
end;
Mal als Anregung

allerdings prüft dieses nur auf das Vorhandensein einer Datei mit dem selben Namen und ignoriert den Dateiinhalt
(aber für schnelle/einfache Prüfungen könnte man noch die Dateigröße, LastWriteTime und das Archiv-Attribut mit vergleichen)

mashutu 9. Jan 2008 13:06

Re: 2 Verzeichnisse mit Dateien vergleichen
 
Zitat:

Zitat von himitsu
@mashutu:
besser auf sr und sr2 achten (so, wie es jetzt ist, gibt's Probleme :zwinker: )

aber zum zweiten FindFirst: FileExists ist auch ganz nett :angel:

Wenn er aber den TSEarchRec hat kann er schon mal ohne grossen Aufwand Datum und Groesse sowie ro-Attribs pruefen.

RavenIV 9. Jan 2008 13:30

Re: 2 Verzeichnisse mit Dateien vergleichen
 
So wie ich Dich verstanden habe, willst Du zwei Verzeichnisse synchronisieren und nicht vergleichen.
Für diesen Zweck gibt es bereits eine Menge Programme.

Shivan 9. Jan 2008 13:56

Re: 2 Verzeichnisse mit Dateien vergleichen
 
Ein weiteres Programm, das sowas kann und (von meiner einer) in Delphi geschrieben ist: FSync.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz