Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dateien in einem Verzeichnis löschen ohne den Ordner selber (https://www.delphipraxis.net/96246-dateien-einem-verzeichnis-loeschen-ohne-den-ordner-selber.html)

Mazel 20. Jul 2007 17:07


Dateien in einem Verzeichnis löschen ohne den Ordner selber
 
Hallo,

ich suche eine Möglichkeit, schnell alle Dateien in einem Verzeichnis zu löschen, auch Unterverzeichnisse ohne das eigentliche Verzeichnis mit zu löschen.
Ich habe mir gedacht zunächst alle Dateien mit FindFirst/FindNext aufzulisten und diese dann zu löschen. Dieser Vorgang dauert aber auch seine gewissen Zeit.
Zudem würde ich das gerne mit einem Fortschrittsbalken verbinden.

Das Problem ist also eine schnelle Möglichkeit zu finden. :wink:

Hat jemand eine Idee?

Gruß
Mazel

Dezipaitor 20. Jul 2007 17:09

Re: Dateien in einem Verzeichnis löschen ohne den Ordner sel
 
mit SHFileOperation kannst du mehrere Dateien löschen. Es wird dann auch automatisch der Fortschritt angezeigt.

Danach kannst du ja wieder den Ordner erstellen.

Mazel 20. Jul 2007 17:23

Re: Dateien in einem Verzeichnis löschen ohne den Ordner sel
 
Diese Lösung habe ich mir auch schon angeschaut würde ich auch verwenden, aber ich frage ja nicht umsonst nach einer Möglichkeit nur den Inhalt zu löschen, denn wenn ich einen tragbaren Player angeschlossen habe, bei dem ich den Inhalt in H:\ löschen möchte, kann ich nicht H:\ neu anlegen bzw. die gezeigte Routine läuft dann leider nicht weil sie ja H:\ auch löschen möchte.

Dezipaitor 20. Jul 2007 17:46

Re: Dateien in einem Verzeichnis löschen ohne den Ordner sel
 
die Funktion akzeptiert auch mehrere Dateien und Ordner. Du musst also nur die Unterobjekte dort übergeben, welches mit FindFirstFile schnell geht.

Mazel 20. Jul 2007 17:51

Re: Dateien in einem Verzeichnis löschen ohne den Ordner sel
 
In dem Verzeichnis sind aber nicht nur Unterordner sondern möglichwerweise auch mehrere 100 anderer Dateien. Da muss ich ja H:\ angeben und das geht leider nicht.

Dezipaitor 20. Jul 2007 17:55

Re: Dateien in einem Verzeichnis löschen ohne den Ordner sel
 
du zählst die Dateien und Ordner von H: mit FindFirst auf. Das geht sehr schnell, selbst bei 100 Dateien und mehr.
Dann kannst du diese Dateinamen der Funktion übergeben, indem du einen entsprechend großen Speicherbereich erstellst und dort die Datei/Ordnerpfade (h:\XY) reinkopierst und mit #0 trennst, bzw. mit #0#0 abschliest.

Hawkeye219 20. Jul 2007 18:21

Re: Dateien in einem Verzeichnis löschen ohne den Ordner sel
 
Hallo Marcel,

hast du es mit Wildcard-Angabe versucht?

Delphi-Quellcode:
var
  Info : TSHFileOpStruct;
begin
  FillChar (Info, SizeOf(Info), 0);
  Info.wFunc := FO_DELETE;
  Info.pFrom := 'd:\YourFolder\*'#0;
  Info.pTo := nil;

  SHFileOperation(Info);
end;
Gruß Hawkeye

Mazel 20. Jul 2007 18:33

Re: Dateien in einem Verzeichnis löschen ohne den Ordner sel
 
Zitat:

Wildcard-Angabe
Damit funktioniert es.

Wieder mal nicht auf das einfachste gekommen ;)

[Edit]
Was ist eigentlich mit #0 gemeint?
[/Edit]

Danke
Gruß
Mazel

Hawkeye219 20. Jul 2007 20:41

Re: Dateien in einem Verzeichnis löschen ohne den Ordner sel
 
Zitat:

Zitat von Mazel
Was ist eigentlich mit #0 gemeint?

Lauf Microsoft-Dokumentation können pFrom und pTo mehrere nullterminierte Dateinamen enthalten. Das Ende jeder Liste muß durch ein zusätzliches Null-Zeichen gekennzeichnet werden. Das Stringende-Zeichen fügt Delphi für uns hinzu (jeder String endet im Speicher mit #0), das Listenende-Zeichen müssen wir selbst anhängen.

Gruß Hawkeye

Mazel 20. Jul 2007 21:14

Re: Dateien in einem Verzeichnis löschen ohne den Ordner sel
 
OK,

danke für die Info. :thumb:

Gruß
Mazel


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:49 Uhr.
Seite 1 von 2  1 2      

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