Hallo,
die folgende Routine prüft, ob die in der Stringliste aSource aufgeführten Dateien in den Verzeichnissen aSourceDir und aDestDir existieren. Falls dem so ist, wird weiterhin geprüft, ob die Datei in aSourceDir neuer ist als die in aDestDir.
Mich würde jetzt interessieren, ob es bei dieser Routine noch Möglichkeiten zur Optimierung gibt oder ob alle Möglichkeiten ausgereizt sind.
Delphi-Quellcode:
procedure BuildFileList(const aSourceDir, aDestDir: string; aSource, aFiles:
TStringList; const aMaxFileAge: Integer); cdecl;
var
dtSourceWrite: TDateTime;
dtDestWrite: TDateTime;
dtCreate: TDateTime;
dtWrite: TDateTime;
sSourceFileName: string;
sDestFileName: string;
bDirectory: Boolean;
bFileInTarget: Boolean;
nFileAge1, nFileAge2: Integer;
bCopyFile: Boolean;
sFileName: string;
begin
aFiles.BeginUpdate;
for sFileName in aSource do
begin
sSourceFileName := IncludeTrailingPathDelimiter(aSourceDir) + sFileName;
sDestFileName := IncludeTrailingPathDelimiter(aDestDir) + sFileName;
bDirectory := IsDirectory(sSourceFileName);
if bDirectory then
Continue;
if FileExists(sDestFileName) then
begin
if (aMaxFileAge = 0) then
begin
dtSourceWrite := FileTimeToDateTime(GetFileLastWrite(sSourceFileName));
dtDestWrite := FileTimeToDateTime(GetFileLastWrite(sDestFileName));
bCopyFile := (dtSourceWrite > dtDestWrite);
end
else
begin
dtCreate := FileTimeToDateTime(GetFileCreation(sSourceFileName));
dtWrite := FileTimeToDateTime(GetFileLastWrite(sSourceFileName));
nFileAge1 := DaysBetween(dtCreate, Date);
nFileAge2 := DaysBetween(dtWrite, Date);
bCopyFile := ((nFileAge1 <= aMaxFileAge) or (nFileAge2 <= aMaxFileAge));
end;
if bCopyFile then
aFiles.Add(sSourceFileName);
end
else
aFiles.Add(sSourceFileName);
end;
aFiles.EndUpdate;
aFiles.Sort;
end;