Guck mal mein Beispiel. Nicht das Sammeln der Daten ist das Problem
Kleines Beispiel. Es wurde alles weggelassen bis auf das, wo es hapert.
Das hier braucht rund 23 Sekunden (D:\ = im PC, Y:\ = Festplatte am Router per USB 100 MBit): (keine der Dateien existiert)
Delphi-Quellcode:
function FileTimeToDateTime(FileTime: TFileTime): TDateTime;
var
ModifiedTime: TFileTime;
SystemTime: TSystemTime;
begin
Result := 0;
if (FileTime.dwLowDateTime = 0) and (FileTime.dwHighDateTime = 0) then
Exit;
FileTimeToLocalFileTime(FileTime, ModifiedTime);
FileTimeToSystemTime(ModifiedTime, SystemTime);
Result := SystemTimeToDateTime(SystemTime);
end;
function getFileLastModified(const aFileName: string): TDateTime;
begin
Result := FileTimeToDateTime(JclFileUtils.GetFileLastWrite(aFileName));
end;
function IsFileANewerFileB(aFileA, aFileB: string): Boolean;
var
bRes: Boolean;
begin
if (not FileExists(aFileB)) or (not FileExists(aFileA)) then
bRes := True
else
bRes := getFileLastModified(aFileA) > getFileLastModified(aFileB);
Result := bRes;
end;
/////////////////////////////////////////////////////////////////////////////////
procedure TForm1.Button1Click(Sender: TObject);
var
freq: Int64;
startTime: Int64;
endTime: Int64;
i: Integer;
a, b: String;
begin
QueryPerformanceFrequency(freq);
QueryPerformanceCounter(startTime);
a := 'D:\Datei1.txt';
b := 'Y:\Datei2.txt';
for i := 0 to 9999 do
begin
if IsFileANewerFileB(a, b) then
begin
end;
end;
QueryPerformanceCounter(endTime);
ShowMessage('Die Routine benötigte etwa ' + IntToStr((endTime - startTime) * 1000 div freq) + 'ms');
end;
/////////////////////////////////////////////////////////////////////////////////
Wenn Y:\ durch D:\ ausgetauscht wird, dauert das Ganze 50ms.