AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Temp Ordner rekursiv löschen geht nicht...
Thema durchsuchen
Ansicht
Themen-Optionen

Temp Ordner rekursiv löschen geht nicht...

Ein Thema von wb32 · begonnen am 6. Aug 2003 · letzter Beitrag vom 6. Aug 2003
Antwort Antwort
wb32

Registriert seit: 4. Jul 2003
143 Beiträge
 
#1

Temp Ordner rekursiv löschen geht nicht...

  Alt 6. Aug 2003, 01:50
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 ?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

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

  Alt 6. Aug 2003, 03:08
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
wb32

Registriert seit: 4. Jul 2003
143 Beiträge
 
#3

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

  Alt 6. Aug 2003, 08:44
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 ?
  Mit Zitat antworten Zitat
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#4

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

  Alt 6. Aug 2003, 09:19
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)...
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#5

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

  Alt 6. Aug 2003, 09:45
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:04 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