AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi 2 Verzeichnisse mit Dateien vergleichen
Thema durchsuchen
Ansicht
Themen-Optionen

2 Verzeichnisse mit Dateien vergleichen

Ein Thema von Eppos · begonnen am 9. Jan 2008 · letzter Beitrag vom 9. Jan 2008
Antwort Antwort
Eppos

Registriert seit: 7. Aug 2006
Ort: Heilbronn
523 Beiträge
 
Delphi 11 Alexandria
 
#1

2 Verzeichnisse mit Dateien vergleichen

  Alt 9. Jan 2008, 12:09
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: 2 Verzeichnisse mit Dateien vergleichen

  Alt 9. Jan 2008, 12:16
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
mashutu

Registriert seit: 15. Nov 2007
195 Beiträge
 
#3

Re: 2 Verzeichnisse mit Dateien vergleichen

  Alt 9. Jan 2008, 12:36
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
utu

if it was hard to write it should be hard to read
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.167 Beiträge
 
Delphi 12 Athens
 
#4

Re: 2 Verzeichnisse mit Dateien vergleichen

  Alt 9. Jan 2008, 12:48
@mashutu:
besser auf sr und sr2 achten (so, wie es jetzt ist, gibt's Probleme )

aber zum zweiten FindFirst: FileExists ist auch ganz nett

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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.167 Beiträge
 
Delphi 12 Athens
 
#5

Re: 2 Verzeichnisse mit Dateien vergleichen

  Alt 9. Jan 2008, 12:51
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mashutu

Registriert seit: 15. Nov 2007
195 Beiträge
 
#6

Re: 2 Verzeichnisse mit Dateien vergleichen

  Alt 9. Jan 2008, 13:06
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.
utu

if it was hard to write it should be hard to read
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: 2 Verzeichnisse mit Dateien vergleichen

  Alt 9. Jan 2008, 13:30
So wie ich Dich verstanden habe, willst Du zwei Verzeichnisse synchronisieren und nicht vergleichen.
Für diesen Zweck gibt es bereits eine Menge Programme.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Benutzerbild von Shivan
Shivan

Registriert seit: 5. Mär 2003
Ort: Ravensburg
131 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: 2 Verzeichnisse mit Dateien vergleichen

  Alt 9. Jan 2008, 13:56
Ein weiteres Programm, das sowas kann und (von meiner einer) in Delphi geschrieben ist: FSync.
Markus Stein
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz