Hallo,
ich bin blutiger Anfänger in Delphi und versuche mich mit einem kleinen CMD-Tool.
Ich will alle Dateien im Tempverzeichnis löschen die älter als 3 Tage sind. Das klappt leider nur zur Hälfte. Mein Tool sagt in vielen Fällen "Zugriff verweigert", allerdings hat Windows nach meinem Ermessen nicht die "Finger" drauf. Mit dem Explorer lassen sich diese problemlos löschen, warum dann nicht mit meinem Code ?
Delphi-Quellcode:
//Delete all files/dirs in TempDir which ones are older than x days
program TempCleaner;
{$APPTYPE CONSOLE}
uses Windows,SysUtils;
//Function
Function MyRemoveDir(sDir : String; OlderThanDays : Integer) : Boolean;
var
iIndex : Integer;
SearchRec : TSearchRec;
sFileName,sErrMess : String;
dtFileDirDate,dtNow : TDateTime;
begin
Result := False;
sDir := sDir + '\*.*';
iIndex := FindFirst(sDir, faAnyFile, SearchRec);
dtNow := Date;
while iIndex = 0 do begin
sFileName := ExtractFileDir(sDir)+'\'+SearchRec.Name;
dtFileDirDate := FileDateToDateTime(SearchRec.Time);
if trunc(dtNow - dtFileDirDate) + 1 > OlderThanDays then
begin
if SearchRec.Attr = faDirectory then begin
if (SearchRec.Name <> '' ) and
(SearchRec.Name <> '.') and
(SearchRec.Name <> '..') then
MyRemoveDir(sFileName,OlderThanDays);
end else begin
//if SearchRec.Attr <> faArchive then
// FileSetAttr(sFileName, faArchive);
if NOT DeleteFile(sFileName) then
sErrMess := SysErrorMessage(GetLastError);
writeln('Could NOT delete ' + sFileName + ' Error: ' + sErrMess);
end;
end;
iIndex := FindNext(SearchRec);
end;
FindClose(SearchRec);
RemoveDir(ExtractFileDir(sDir));
Result := True;
end;
//Mainproggi
var
temp_dir : string;
begin
temp_dir := SysUtils.GetEnvironmentVariable('temp');
//writeln(temp_dir);
//MyRemoveDir('D:\Temp\test\test', 3);
MyRemoveDir(temp_dir, 3);
end.
Kann mir dabei jemand helfen ?
Wolle