Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Temp -Ordner löschen - Winxp (https://www.delphipraxis.net/116215-temp-ordner-loeschen-winxp.html)

aaron 25. Jun 2008 08:44


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:
//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.
Leider erhalte ich folgende Fehlermeldung beim löschen:


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

Luckie 25. Jun 2008 08:51

Re: Temp -Ordner löschen - Winxp
 
Dann guck doch erstmal in der Hilfe was E/A Fehler 105 ist.

aaron 25. Jun 2008 08:58

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

Luckie 25. Jun 2008 09:06

Re: Temp -Ordner löschen - Winxp
 
Zitat:

Zitat von aaron
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,

Das wäre das erste mal, dass der Grund eines Fehlers nicht weiter helfen würde. :roll:

Zitat:

bzw. könnte man eine Ausnahme einbauen, so nach dem Motto->Lösche alle Dateien die nicht in Benutzung sind.
Genau das musst du machen. In diesem Fall ist es sogar noch einfacher, lass die Fehlermeldunmg weg.

divBy0 25. Jun 2008 09:08

Re: Temp -Ordner löschen - Winxp
 
Versuch's mal mit try-except-end...

Luckie 25. Jun 2008 09:10

Re: Temp -Ordner löschen - Winxp
 
Zitat:

Zitat von divBy0
Versuch's mal mit try-except-end...

DeleteFile wirft nur leider keine Exception. ;) Aber was spricht dagegen in diesem Fall einfach den Fehler zu ignorieren?

divBy0 25. Jun 2008 09:14

Re: Temp -Ordner löschen - Winxp
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von divBy0
Versuch's mal mit try-except-end...

DeleteFile wirft nur leider keine Exception. ;) Aber was spricht dagegen in diesem Fall einfach den Fehler zu ignorieren?

Ist den EInOutError keine Exception? Wusste ich nicht, das DeletFile keine Exception wirft. Wieder was gelernt! :thumb:

Luckie 25. Jun 2008 09:19

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:

DeleteFile löscht die mit FileName angegebene Datei vom Datenträger. Kann die Datei nicht gelöscht oder gefunden werden, gibt die Funktion False zurück.

FAlter 25. Jun 2008 09:33

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

Sherlock 25. Jun 2008 09:52

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

SirThornberry 25. Jun 2008 09:54

Re: Temp -Ordner löschen - Winxp
 
Der Quelltext und deine Frage unterscheiden sich etwas. Willst du den Temp-Ordner löschen oder leeren?

aaron 25. Jun 2008 10:05

Re: Temp -Ordner löschen - Winxp
 
Hi...hatte ich garnicht gesehen, UPS.
Leeren würde mir 100% reichen.
Gruß
Aaron

Larsi 25. Jun 2008 10:07

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]

aaron 25. Jun 2008 10:49

Re: Temp -Ordner löschen - Winxp
 
Hallo Larsi,

stimmt, war dann doch mein Fehler, sorry.
Danke an alle!

Gruß
Aaron

littleDave 25. Jun 2008 11:44

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:
if (SearchRec.Attr and faDirectory) <> 0 then begin
oder
Delphi-Quellcode:
if (SearchRec.Attr and faDirectory) = faDirectory then begin
Zeile 37:
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