![]() |
Temp -Ordner löschen - Winxp
Hallo
ich habe mal eine Frage. Wie kann ich das Windows-Temp Verzeichnis löschen? Habe hier im Forum ein Beispiel gefunden:
Delphi-Quellcode:
Leider erhalte ich folgende Fehlermeldung beim löschen:
//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, 0); end.
Delphi-Quellcode:
---------------------------
Benachrichtigung über Debugger-Exception --------------------------- Im Projekt Project2.exe ist eine Exception der Klasse EInOutError mit der Meldung 'E/A-Fehler 105' aufgetreten. --------------------------- Anhalten Fortsetzen Hilfe --------------------------- Grüße Aaron |
Re: Temp -Ordner löschen - Winxp
Dann guck doch erstmal in der Hilfe was E/A Fehler 105 ist.
|
Re: Temp -Ordner löschen - Winxp
Die Datei kann nicht gelöscht werden bzw. es kann nicht auf die Datei zugegriffen werden weil sie von einem anderen Prozess verwendet wird.
Aber das hilft mir auch nicht so richtig weiter, bzw. könnte man eine Ausnahme einbauen, so nach dem Motto->Lösche alle Dateien die nicht in Benutzung sind. Grüße Aaron |
Re: Temp -Ordner löschen - Winxp
Zitat:
Zitat:
|
Re: Temp -Ordner löschen - Winxp
Versuch's mal mit try-except-end...
|
Re: Temp -Ordner löschen - Winxp
Zitat:
|
Re: Temp -Ordner löschen - Winxp
Zitat:
|
Re: Temp -Ordner löschen - Winxp
Ich gehe mal davon aus, da DeleteFile mit einem Rückgabewert arbeitet. Und E/A Error steht für Ein- / Ausgabefehler, nicht für eine Exception. Wo die Exception allerdings jetzt herkommt, kann ich im Moment auch nicht sagen. In der Hilfe steht jedenfalls:
Zitat:
|
Re: Temp -Ordner löschen - Winxp
Hi,
DeleteFile (aus der SysUtils) gibt true oder false zurück, Exceptions sollte es eigentlich nicht geben. AFAIK greift sie auf die DeleteFile aus der Windows zurück, welche fast genauso aussieht (nur PChar statt String). Allerdings ist der Ansatz ein Bisschen problematisch. Wenn ich die rtscan.ini aus meinem Temp-Verzeichnis lösche, funktioniert mein Scanner nicht mehr, da der Treiber dummerweise das Temp-Verzeichnis als dauerhafte Datenablage missbraucht :( daher solltest du den Zeitpunkt des letzten Zugriffs vor dem Löschen erfragen. Mfg FAlter |
Re: Temp -Ordner löschen - Winxp
Ich gehe doch sehr davon aus, daß das RemoveDir ganz unten die Exception auslöst...und das tut sie, wenn noch Dateien im Ordner sind.
Es fehlt halt die genaue Angabe, wann denn der Fehler ausgelöst wird. :glaskugel: Sherlock |
Re: Temp -Ordner löschen - Winxp
Der Quelltext und deine Frage unterscheiden sich etwas. Willst du den Temp-Ordner löschen oder leeren?
|
Re: Temp -Ordner löschen - Winxp
Hi...hatte ich garnicht gesehen, UPS.
Leeren würde mir 100% reichen. Gruß Aaron |
Re: Temp -Ordner löschen - Winxp
[OT] Die Lösung ist mal wieder ganz einfach. Lösche nicht den ganzen Ordner sondern nur dessen Inhalt^^ [OT]
|
Re: Temp -Ordner löschen - Winxp
Hallo Larsi,
stimmt, war dann doch mein Fehler, sorry. Danke an alle! Gruß Aaron |
Re: Temp -Ordner löschen - Winxp
Also irgendwie kopieren alle fehlerhaften Quelltext irgendwo her:
Mir sind gerade ein paar Sachen ins Auge geschossen: Zeile 29 sollte heißen
Delphi-Quellcode:
oder
if (SearchRec.Attr and faDirectory) <> 0 then begin
Delphi-Quellcode:
Zeile 37:
if (SearchRec.Attr and faDirectory) = faDirectory then begin
Da fehlt ein begin-end Block. Die writeln-Methode wird immer Ausgeführt, auch beim erfolgreichen Löschen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz