Komplettes Verzeichnis mit Unterverzeichnissen löschen?



  • Wie kann man ein komplettes Verzeichnis mit Unterverzeichnissen löschen?



  • SHFileOperation



  • Kann da bitet jemand ein komplettes Beispiel zum Löschen eines verzeichnisses incl Unterverzeichnisse anbieten, schaffe das nicht alleine.



  • Wieviel zahlst du?



  • Null komma nix 👎



  • über google findeste beispiele für umsonst



  • Kenne die rekursive Methode ein Verzeichnis mit FindFirst und FindNext zu durchlaufen (habe Beispiele zum Durchzählen der Dateien oder zum Kopieren). Dabei könnte man auch alle dateien und Verzeichnisse löschen. Das ist aber umständlich. Ist dieser Schwachfug hier auch notwendig?



  • bei SHFileOperation ist dies nicht nötig



  • Läuft das wirklich so? (dafür habe ich Beispiele für andere Maßnahmen)

    Rekursiv durch alle Verzeichnisse gehen:
    Hat ein Verzeichnis keine Unterverzeichnisse mehr, dann lösche alle Dateien darin und entferne das Verzeichnis.

    Funktionen:

    HANDLE FindFirstFile
    (
    LPCTSTR lpFileName, // file name
    LPWIN32_FIND_DATA lpFindFileData // data buffer
    );

    BOOL FindNextFile
    (
    HANDLE hFindFile, // search handle
    LPWIN32_FIND_DATA lpFindFileData // data buffer
    );

    BOOL RemoveDirectory
    (
    LPCTSTR lpPathName // directory name
    );

    BOOL DeleteFile
    (
    LPCTSTR lpFileName // file name
    );

    Ich dachte, dass das inzwischen einfacher geht. 🙄



  • bei SHFileOperation ist dies nicht nötig

    zumindest klare Auskunft, kann niemand ein Code-Fragment dafür geben? Sollte eigentlich in der FAQ stehen.



  • @tipp: habe gesucht, lande nur bei VB oder Delphi-Beispielen mit WinAPI. Hast du einen Link gefunden für C/C++/WinAPI? 😕



  • Beispiel:

    Ansatz 4: Löschen wie Windows selber - inkl. Papierkorb
    Die vierte vorgestellte Möglichkeit brilliert vor allem durch einen besonderen Vorteil: Mithilfe des Windows API können Sie nicht nur einen Verzeichnisbaum komplett löschen. Sie können sogar Verzeichnisse und / oder Dateien sogar in den Windows-Papierkorb verschieben, statt sie unwiederbringlich zu löschen.

    Hierfür verwenden Sie die API-Funktion SHFileOperation, die auch der Windows Explorer selber für Dateioperationen wie Kopieren, Verschieben, Umbenennen und Löschen verwendet.

    Die Steuerung dieser Funktion erfolgt über eine Struktur vom Typ SHFILEOPSTRUCT. In ihrem Element wFunc wird dabei die Art der gewünschten Operation angegeben: Für das Löschen wird hier die Konstante FO_DELETE übergeben. Im Element pFrom wird der zu löschende Verzeichnispfad angegeben; er wird zusätzlich mit zwei vbNullChar-Zeichen abgeschlossen. Schließlich wird über den Parameter fFlags das Aussehen und Verhalten der Operation bestimmt: In diesem Fall soll keine Benutzerinteraktion erfolgen (FOF_SILENT Or FOF_NOCONFIRMATION Or FOF_NOERRORUI). Durch Hinzufügen der Konstanten FOF_ALLOWUNDO zu fFlags wird bewirkt, dass der Verzeichnispfad nicht unwiederbringlich gelöscht, sondern in den Windows Papierkorb verschoben wird.

    Lief der Aufruf von SHFileOperation erfolgreich ab, so returniert die Funktion den Wert 0. Dem Parameter fAnyOperationsAborted der SHFILEOPSTRUCT-Struktur kann nach der Rückkehr der Funktion entnommen werden, ob vorgesehene Dateioperationen während der Ausführung der Funktion abgebrochen wurden. Trägt der Parameter den Wert 0, war die Ausführung vollständig.

    ' --- Notwendige API-Deklarationen ---


Anmelden zum Antworten