Hallo,
ich versuche gerade mein Programm die älteste Datei in einem Verzeichnis finden zu lassen.
Dazu durchsuche ich zuerste das Verzeichnis und speichere die Dateinamen in eine StringList.
Dann soll die StringList sortiert werden. Dies mache ich per insert sort und nutze die IsNewerThan Funtkion,
die prüft ob FileName1 neuer ist als Nummer 2.
Leider sortiert das nicht richtig.
Ich weiss aber nicht warum.
Habe ich evtl irgendwo einen Denkfehler?
Kann mir jemand weiterhelfen?
Ach ja: Das ganze geht in der Konsole von statten und "AllOptions" ist ein globales record,
in dem in der Variable "FileName" ein Ziel-Datei-name inkl. Pfad gespeichert ist.
edit: Aufgerufen wird im Programmablauf die function "GetOldestFile".
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80:
| function IsNewerThan(FileName1 : string; FileName2 : string) : boolean; var FileDate: Integer; DateTime1: TDateTime; DateTime2: TDateTime; iDate1 : int64; iDate2 : int64; begin
if (FileExists(FileName1) AND FileExists(FileName2)) then begin
FileDate := FileAge(FileName1); DateTime1 := FileDateToDateTime(FileDate);
FileDate := FileAge(FileName2); DateTime2 := FileDateToDateTime(FileDate);
iDate1 := StrToInt(FormatDateTime('yyyymmdd',DateTime1)); iDate2 := StrToInt(FormatDateTime('yyyymmdd',DateTime2));
if iDate1 > iDate2 then result:=true else result:=false;
end else result:=false; end;
function GetOldestFile(path : string) : string; var AllFiles : TStringList; rec : TSearchRec; i : integer; temp : string; begin AllFiles:=TStringList.create;
if FindFirst(IncludeTrailingPathDelimiter(ExtractFilePath(Alloptions.Filename))+'*.*',faAnyFile,rec) = 0 then begin AllFiles.Add(rec.Name); while FindNext(rec) = 0 do AllFiles.Add(rec.Name);
FindClose(0); end;
i:=0; while i< AllFiles.Count-1 do begin if IsNewerThan(IncludeTrailingPathDelimiter(ExtractFilePath(Alloptions.Filename))+AllFiles[i], IncludeTrailingPathDelimiter(ExtractFilePath(Alloptions.Filename))+AllFiles[i+1]) then begin temp:=AllFiles[i]; AllFiles[i]:=AllFiles[i+1]; AllFiles[i+1]:=temp; i:=0; end else inc(i); end;
for i:=0 to AllFiles.Count-1 do writeln(AllFiles[i]);
AllFiles.free; end; |