Verzeichnisbaum komplett löschen



  • Hallo, ich möchte unter Windows (7) einen beliebigen Ordner (der mehrere Unter-Ordner und Dateien enthält) komplett löschen; d.h. alle Dateien löschen, alle Ordner leeren, und dann auch löschen, sodass ich am Ende nicht mal mehr den Anfangsordner habe.

    Mit ein paar kläglichen Versuchen habe ich probiert, eine rekursive Funktion aufzustellen:

    #include <stdio.h>
    #include <dir.h>
    #include <dirent.h>
    
    #define MAX_PFAD 200
    
    FILE *out_file;
    DIR *dir;
    struct dirent *dirzeiger;
    
    int verzeichnis_loeschen(char *name)
    {
        int error_counter = 0, loop = 0;
        char data_string[100][MAX_PFAD];
        data_string[0][0] = 0x00;
    
        if( (dir = opendir(name)) == NULL )   
        {
                         printf("\nOrdner konnte nicht geoeffnet werden!");
                         return -1;
        }
    
        while( (dirzeiger = readdir(dir)) != NULL )
        {
               strcpy( data_string[loop], (*dirzeiger).d_name );
               loop++;
        }
        while(loop != 0)
        {
                   printf("\n%s\n", data_string[loop]);
                   if( opendir(data_string[loop]) == NULL )
                   {
                       chdir(name);
                       if( remove(data_string[loop]) == -1 )
                           printf("\nloeschen fehlgeschlagen(%d)", error_counter++);
                   }
                   else 
                   {
                        verzeichnis_loeschen(data_string[loop]);
                   }
                   rmdir(name);
                   loop--;
        }
    
        rmdir(name);
        return 0;
    }
    

    Ich weis, dass da noch ein paar schwere Denkfehler drinnen sind, finde diese jedoch nicht -.-
    Daher würd ich mich über jede Hilfe freuen 👍



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum DOS und Win32-Konsole verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hi,
    unter WindowsXP geht das recht bequem mit der Zeile

    system("rd some_dir /s /q");
    

    Ich habe allerdings keine Ahnung, ob Windows 7 das unterstützt.

    Gruß,
    B.B.



  • rmdir sollte gehen



  • @Big Brother:
    thx, aber genau diesen System-Aufruf will ich ja durch eine Funktion umgehen^^

    @rmdir:
    rmdir(const char*) löscht leider nur bis Win XP den kompletten Ordner (bei Win7 verweigert er den Löschvorgang, wenn noch etwas im Ordner liegt -- Unterordner/Dateien)
    Daher will ich ja auch mit einer rekursiven Funktion nachhelfen...

    @All:
    Kennt keiner ne Lösung, wie man das gescheit hinbekommt, oder wie man das Problem anders angehen soll? 😞



  • Microsoft hat ein fertiges Programmbeispiel was fast tut was du willst: Listing the Files in a Directory. Du musst nur noch das _tprintf durch DeleteFile bzw RemoveDirectory ersetzen.

    Pseudocodemäßig sieht das dann so aus:

    deletedirectory(path):
        for file in path:
            if isdirectory(file):
                 deletedirectory(path + file)
                 removedir(file)
            else
                makewriteable(file)
                deletefile(file)
        removedir(path)
    

    In Python ist es schon fast lauffähig.
    Wie man über Dateien in Ordnern iteriert, wie man Ordner von Dateien unterscheidet und wieso man makewriteable braucht steht im Beispiel.

    Ansonsten gib mal unter Win7 "help del" ein, wahrscheinlich stehen dort die Optionen um einen Ordner samt Unterordner zu löschen und du kannst es doch mit system machen.



  • mmh ok, danke euch allen! 🙂
    (ich denke, ich werde es dann doch mit einem system-Aufruf abfertigen...erspart mir Arbeit^^)


Anmelden zum Antworten