Alle leeren Ordner löschen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Dancger.

    Alle leeren Ordner löschen

    Hallo zusammen

    Ich brauch ne Starthilfe, ich glaub es ist zu früh am Morgen :sleeping:
    Auf meinem Desktop ist einen Ordner in dem ich eine blödsinnige Ordnerstruktur angelegt habe. Teilweise sind die Ordner leer, teilweise nicht (Dateien oder Ordner).

    Als Ausgangslage ist der Pfad des zu säubernden Ordner.
    Dann sollte er mir alle Ordner durchsuchen, und jeden Ordner löschen, indem sich weder Files noch ein weiterer Ordner befindet.
    Ich denke das alles rekursiv abläuft ist schonmal richtig.

    Ich will keinen C&P und (momentan) auch nicht Codeausschnitte oder Examples sondern eher Pseudocode.
    Einen logischen Ablauf wär schön.

    Mfg Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...
    Mit Directory.GetDirectories kannst du dir erstmal alle Ordner aus einem Ordner holen.

    Daher du es aber rekursiv machen musst , kannst du auch direkt mit deiner Rekursionsfunktion die Ordner holen.

    Zur Rekursion kannst du z.b. mal die Fakultät ausprobieren , um zu verstehen wie das ganze abläuft.

    Hier mal bisschen zum lesen:

    VB.NET-Quellcode

    1. http://de.wikipedia.org/wiki/Rekursive_Programmierung

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „AsdAsd1337“ ()

    AsdAsd1337 schrieb:

    Mit Directory.GetDirectories kannst du dir erstmal alle Ordner aus einem Ordner holen.
    Daher du es aber rekursiv machen musst , kannst du auch direkt mit deiner Rekursionsfunktion die Ordner holen.
    Zur Rekursion kannst du z.b. mal die Fakultät ausprobieren , um zu verstehen wie das ganze abläuft.

    Wie gesagt, dass programmieren an sich ist kei Problem, nur hatte ich Probleme mit dem logischen Ablauf^^

    Hab's jt geschafft (Energie wirkt Wunder :P ) :

    VB.NET-Quellcode

    1. Private Sub SearchAndDestroy(ByVal Pfad As String)
    2. 'Weitere Ordner durchsuchen
    3. For Each Ordner As String In IO.Directory.GetDirectories(Pfad)
    4. SearchAndDestroy(Ordner)
    5. Next Ordner
    6. 'Falls keine Dateien und Unterordner existieren // Ordner löschen
    7. If IO.Directory.GetFiles(Pfad).Length = 0 And IO.Directory.GetDirectories(Pfad).Length = 0 Then
    8. IO.Directory.Delete(Pfad)
    9. End If
    10. End Sub 'Alle Ordner suchen und ggf. löschen


    Einfach die die Sub mit dem Startpfad aufrufen und schon werden alle leeren Ordner gelöscht.

    Mfg Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...
    mal eine frage:
    gegeben:
    - 2 leere Ordner
    - der 2. ist in dem 1.Ordner // -> der 1. ist nur fast leer

    wenn dann diese Schleife durchlaufen wird, wird der 2.Ordner gelöscht.
    aber der 1. müsste doch noch erhalten bleiben, da er ja davor noch den 2. leeren Ordner beinhaltet hat.
    Oder irre ich mich da?

    Valerian

    Gelöschter Benutzer schrieb:

    Oder irre ich mich da?

    Ja, du irrst.

    Rekursion unterscheidet zwischen TopDown- und BottomUp-Durchlauf.

    Der topDown-Durchlauf besucht zunächst die übergeordneten Knoten, danach die Kinder. Diese Reihenfolge ist die üblichere, und ist notwendig zB. zum "Struktur-Aufbau".

    Bei BottomUp werden zunächst die Kinder besucht. Diese Reihenfolge ist nötig zum Struktur-Abbau (was Dancger nämlich tut).

    Zu implementieren ist der Unterschied denkbar einfach: Wird der Nutz-Code vor dem rekursiven Aufruf ausgeführt, so wird in TopDown-Reihenfolge vorgegangen - wird der Nutzcode nach dem Selbstaufruf ausgeführt, so isses BottomUp.

    Mehr solche Theorie in Bäume durchlaufen mit Rekursion

    ErfinderDesRades schrieb:

    Bei BottomUp werden zunächst die Kinder besucht. Diese Reihenfolge ist nötig zum Struktur-Abbau (was Dancger nämlich tut).

    Erleichterung pur. Vale hat mich bereits unsicher gemacht.

    Mfg Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...