Funktion um leere Verzeichnisse zu finden gesucht

  • Hallo, gibt es vllt. schon eine fertige Funktion o.ä. um einen Verzeichnisbaum incl. Unterverzeichnisse zu durchsuchen um leere Ordner zu finden und diese dann zu löschen?
    Danke

    Einmal editiert, zuletzt von igillan (4. August 2010 um 18:00)

  • Vorschlag fürs finden:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $aDirs = FindEmptyDirs(@WindowsDir)
    _ArrayDisplay($aDirs, "Leere Verzeichnisse")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func FindEmptyDirs($sSD, Const $bS = True)
    ;by AspirinJunkie
    Local $FFFF, $FFNF, $aD
    Local Static $sRet
    If $bS Then $sRet = ''
    $FFFF = FileFindFirstFile($sSD & '\*')
    If @error Then
    $sRet &= $sSD & '|'
    Else
    Do
    $FFNF = FileFindNextFile($FFFF)
    If @error Then ExitLoop
    If @extended Then
    FindEmptyDirs($sSD & '\' & $FFNF, False)
    EndIf
    Until 0
    FileClose($FFFF)
    EndIf
    If $bS Then
    Local $aRet = StringSplit(StringTrimRight($sRet, 1), '|', 2)
    $sRet = 0
    Return $aRet
    EndIf
    EndFunc

    [/autoit]

    2 Mal editiert, zuletzt von AspirinJunkie (4. August 2010 um 16:18)

  • Du wählst nicht alle Elemente auf einmal auf sondern gehst das Array durch und löschst jedes einzeln.
    Ich denke du hast noch bisschen Schwierigkeiten mit Arrays umzugehen?
    Wenn ja solltest du dir dies erstmal anschauen (von BugFix): >>Array-Tutorial<<

    Wenn du das durchgelesen hast und probiert hast wie du dein Problem mit Arrays löst, dann (wirklich nur dann) noch eine abgewandelte Form bei welcher die Verzeichnisse direkt gelöscht werden:

    Spoiler anzeigen
    [autoit]

    Func DelEmptyDirs($sSD)
    ;by AspirinJunkie
    Local $FFFF, $FFNF
    If StringRight($sSD, 1) = '\' Then $sSD = StringTrimRight($sSD, 1)
    $FFFF = FileFindFirstFile($sSD &'\*')
    If @error = 1 Then
    DirRemove($sSD)
    ElseIf $FFFF <> -1 Then
    Do
    $FFNF = FileFindNextFile($FFFF)
    If @error Then ExitLoop
    If @extended Then DelEmptyDirs($sSD & '\' & $FFNF)
    Until 0
    FileClose($FFFF)
    EndIf
    EndFunc

    [/autoit]

    2 Mal editiert, zuletzt von AspirinJunkie (4. August 2010 um 15:42)

  • [autoit]

    #include <Array.au3>

    [/autoit][autoit][/autoit][autoit]

    $aDirs = FindEmptyDirs(@WindowsDir)
    _ArrayDisplay($aDirs, "Leere Verzeichnisse")
    For $i=0 to Ubound($aDirs)-1
    DirRemove($aDirs[$i])
    Next

    [/autoit][autoit][/autoit][autoit]

    Func FindEmptyDirs($sSD, Const $bS = True)
    ;by AspirinJunkie
    Local $FFFF, $FFNF, $aD
    Local Static $sRet, $hDLL
    If $bS Then
    $hDLL = DllOpen('kernel32.dll')
    $sRet = ''
    EndIf

    [/autoit][autoit][/autoit][autoit]

    For $i In StringSplit($sSD, '|', 2)
    If StringRight($i, 1) = '\' Then $i = StringTrimRight($i, 1)
    If Not FileExists($i) Then ContinueLoop

    [/autoit][autoit][/autoit][autoit]

    $FFFF = FileFindFirstFile($i & '\*')
    If $FFFF <> -1 Then
    Do
    $FFNF = FileFindNextFile($FFFF)
    If @error Then ExitLoop
    If @extended Then
    FileFindFirstFile($i & '\' & $FFNF & '\*')
    If @error Then
    $sRet &= $i & '\' & $FFNF & '|'
    Else
    $aD = DllCall($hDLL, 'dword', 'GetFileAttributesW', 'wstr', $i & '\' & $FFNF)
    If @error And BitAND($aD[0], 0x400) Then ContinueLoop
    FindEmptyDirs($i & '\' & $FFNF, False)
    EndIf
    EndIf
    Until 0
    FileClose($FFFF)
    EndIf
    Next
    If $bS Then
    DllClose($hDLL)
    Local $aRet = StringSplit(StringTrimRight($sRet, 1), '|', 2)
    $sRet = 0
    Return $aRet
    EndIf
    EndFunc

    [/autoit]