Delphi-PRAXiS

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

scrat1979 20. Jul 2007 21:49

Re: Dateien in einem Verzeichnis löschen ohne den Ordner sel
 
// EDIT:
Oje, habe irgendwie Deinen Thread nur zur Hälfte gelesen, also vergiß meine Antwort einfach - du hast das ganze ja schon probiert. Wobei mich es ehrlich gesagt wundert, daß es bei Dir so lange dauert. Wie viele Dateien hast Du denn zu löschen? Also bei mir geht es auch mit 1.000 Dateien relativ schnell - eine Sekunde hin oder her dürfte doch (im Normalfall) keine Rolle spielen, oder?!? Eventuell lässt sich Deine Routine ja optimieren...
Was den Fortschrittsbalken angeht: Ich zähle die Dateien vorher über eine ganz simpel gehaltene FindFirst/FindNext-Funktion. Bei meiner "C:"-Systemplatte dauert das Zählen ungefähr 3(!) Sekunden und es sind WESENTLICH(!) mehr als 1000 Dateien.... :gruebel:

SCRaT



================================================== ==================================================

Was würde denn dagegensprechen über eine rekursive FindFirst..FindNext - Funktion die Dateinamen zu bekommen und diese dann jeweils gleich zu löschen? (zich Threads dazu sind hier schon im Forum...). Das wäre für mich jedenfalls die einfachste Version. Dann würde sich das erstellen der Verzeichnis auch erledigen.

SCRaT

Mazel 20. Jul 2007 22:00

Re: Dateien in einem Verzeichnis löschen ohne den Ordner sel
 
Gut ich habe mir keine Gedanken darüber gemacht das das wahrscheinlich relativ kurz sein wird, ok.
Rekursiv suchen und gleich löschen mit FindFirst/FindNext, davon wird abgeraten so dstd.info: http://www.dsdt.info/tipps/?id=68

scrat1979 20. Jul 2007 22:06

Re: Dateien in einem Verzeichnis löschen ohne den Ordner sel
 
Hmmm... Also bei hat damit bisher alles geklappt. Man könnte ja auch einfach alle Dateien in eine StringList schreiben und diese eingefügte Dateien dann danach löschen. Aber ok, Du hast ja jetzt bereits schon eine gute Lösung gefunden. :cheers:

SCRaT

Mazel 20. Jul 2007 22:09

Re: Dateien in einem Verzeichnis löschen ohne den Ordner sel
 
Naja, so halb gut ist sie ;), da sie nicht ganz zu meinem Schema passt was den Fortschritsbalken angeht. Wenn ich es hinbekomme, werde ich wohl alle Dateien in eine Stringlist auflisten und dann der Reihe nach löschen damit ich meinen eigenen Balken verwenden kann, wenn nicht lass ich es so.

scrat1979 20. Jul 2007 22:13

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

Zitat von Mazel
Naja, so halb gut ist sie ;), da sie nicht ganz zu meinem Schema passt was den Fortschritsbalken angeht. Wenn ich es hinbekomme, werde ich wohl alle Dateien in eine Stringlist auflisten und dann der Reihe nach löschen damit ich meinen eigenen Balken verwenden kann, wenn nicht lass ich es so.

Habe einmal genau dafür eine Komponente (AdvFileSearch.pas) geschrieben und in einem anderen Thread gepostet. Ist zwar (glaube ich) nicht mehr meine aktuellste Version, die Kernfunktionen haben sich aber nicht geändert und helfen Dir evtl. weiter. hier ist der Link. Viel Spaß damit!

SCRaT

Mazel 20. Jul 2007 22:18

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

ich schau mir das mal an. :)
Eventuell lässt sich da was verwenden und bei mir einbauen. :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 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