![]() |
Temp Ordner rekursiv löschen geht nicht...
Hallo alle zusammen...
Folgende Probleme: ich will den Ordner Temp auf meiner Platte leeren und verwende dazu folgenden Source: Wenn ich dem Pfad zum Temp Ordner mit der folgenden Funktion ermittle:
Delphi-Quellcode:
Bekomme ich folgendes Ergebniss:
procedure TForm1.tab1Show(Sender: TObject);
var Buffer: array[0..MAX_PATH] of Char; begin GetTempPath(SizeOf(Buffer) - 1, Buffer); ordner.Text:= StrPas(Buffer); end;
Code:
ich habe aber auch noch hier einen Temp Ordner:
C:\DOKUME~1\stephan\LOKALE~1\Temp\
Code:
Welcher ist denn nun wofür ?
C:\WINDOWS\Temp\
Die Routine zum löschen des Inhaltes:
Delphi-Quellcode:
function DelDir(dir: string): Boolean;
var fos: TSHFileOpStruct; begin ZeroMemory(@fos, SizeOf(fos)); with fos do begin wFunc := FO_DELETE; fFlags := FOF_SILENT or FOF_NOCONFIRMATION or FOF_NOERRORUI; pFrom := PChar(dir + #0); end; Result := (0 = ShFileOperation(fos)); end; procedure TForm1.Button2Click(Sender: TObject); begin DelDir(ordner.Text+'*.*'); end; Der Ordner kann damit nicht geleert werden wenn Dateien darin enthalten sind auf die zur Laufzeit zugegriffen wird... Was kann man da machen ? |
Re: Temp Ordner rekursiv löschen geht nicht...
Zitat:
Geöffnete Dateien kannst du übrigens auch nicht von Hand über den Explorer löschen. Damit mußt du dich also abfinden. |
Re: Temp Ordner rekursiv löschen geht nicht...
ok zugegeben, ich hab mich blöd ausgedrückt :)...
ist schon klar das die Dateien dann nicht gelöscht werden sollen, es wäre nur schön wenn man die Routine zu umstricken könnte das sie an der stelle nicht abbricht. Wenn von 100 Dateien 1 nicht gelöscht werden kann ist es ok, dann aber wenigstens die anderen 99 ... hast du ne idee mit den 2 Tem Ordnern ? Welcher wird denn wann verwendet ? |
Re: Temp Ordner rekursiv löschen geht nicht...
Zitat:
Es gibt aber auch einige Programme, welche trotzdem den Windows\Temp Ordner verwenden... Du kannst ja einfach, zur Sicherheit, hingehen und nachsehen, ob c:\ oder c:\[Windows-Ordner]\ ein "Temp"-Verzeichnis ist und diese ggf. auch noch leeren... Wegen dem Löschen könntest Du auch alle Files einzeln über DeleteFile löschen (in einem try except Block)... |
Re: Temp Ordner rekursiv löschen geht nicht...
Also du müsstest erstmal wirklich was rekursives schreiben.
Ein Beispiel findest du in FTchange ... aber nur Unicode derzeit. (siehe auch FW oder OS-Sektion). Da nimmst du eine Schlefie, die solange läuft, wie FindNext was zurückgibt (also Erfolg). Innerhalb der Schleife überprüfst du die Attribute und gehst dann mit einem weiteren Aufruf der Procedure/Function (in der dies Schleife sich befindet) in jedes Verzeichnis. Und wenn es sich um Datei oder Verzeichnis handelt, dann kannst du zB versuchen es zu löschen ... und wenn es nicht klappt einen Fehler ausgeben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:26 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