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 rekursiv löschen geht nicht... (https://www.delphipraxis.net/7216-temp-ordner-rekursiv-loeschen-geht-nicht.html)

wb32 6. Aug 2003 01:50


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:
procedure TForm1.tab1Show(Sender: TObject);
var
  Buffer: array[0..MAX_PATH] of Char;
begin
   GetTempPath(SizeOf(Buffer) - 1, Buffer);
    ordner.Text:= StrPas(Buffer);
end;
Bekomme ich folgendes Ergebniss:

Code:
C:\DOKUME~1\stephan\LOKALE~1\Temp\
ich habe aber auch noch hier einen Temp Ordner:
Code:
C:\WINDOWS\Temp\
Welcher ist denn nun wofür ?

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 ?

Luckie 6. Aug 2003 03:08

Re: Temp Ordner rekursiv löschen geht nicht...
 
Zitat:

Zitat von wb32
Der Ordner kann damit nicht geleert werden wenn Dateien darin enthalten sind auf die zur Laufzeit zugegriffen wird...
Was kann man da machen ?

Nicht viel. Geöffnete Dateien kan man eben nicht löschen. Wäre ja auch katastrophal. Sie sind eben noch geöffnet, weil sie von den Programmen noch gebraucht werden. Du würdest ja, wenn du sie löscht, den Programmen den Teppich unter den Füßen wegziehen und sie so eventuell zum Absturz bringen und das kann ja wohl nicht dein Ziel sein.
Geöffnete Dateien kannst du übrigens auch nicht von Hand über den Explorer löschen. Damit mußt du dich also abfinden.

wb32 6. Aug 2003 08:44

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 ?

FriFra 6. Aug 2003 09:19

Re: Temp Ordner rekursiv löschen geht nicht...
 
Zitat:

Zitat von wb32
hast du ne idee mit den 2 Tem Ordnern ?

Welcher wird denn wann verwendet ?

Normalerweise sollte nur der Tempordner verwendet werden, welchen Du über GetTempPath erhällst.
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)...

Assarbad 6. Aug 2003 09:45

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 09:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz