Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0558: Deltree-Funktion

 von 

Beschreibung 

Hier wird der aus Dos-Zeiten bekannte Befehl DelTree in Visual Basic nachgebaut. Man kann damit ein Verzeichnis mitsamt allen Unterverzeichnissen und den enthaltenen Dateien löschen.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

keine

Download:

Download des Beispielprojektes [2,12 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Projekt1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Textfeld "Text1"
' Steuerelement: Schaltfläche "Command1"

'
'Autor:  NoOne <noone@aon.at>

Option Explicit

Private Sub DelTree(sFolder As String)
    Dim sCurrFile As String
    
    ' Variable mit der Pfadangabe füllen
    sCurrFile = Dir(sFolder & "\*.*", vbDirectory)
    
    ' Prüfen ob Verzeichniss vorhanden
    Do While Len(sCurrFile) > 0
        
        ' Wenn noch Dateien oder Unterordner vorhanden sind
        If sCurrFile <> "." And sCurrFile <> ".." Then
        
            ' Wenn es sich dabei um einen Unterordner handelt
            If (GetAttr(sFolder & "\" & sCurrFile) And vbDirectory) = _
                vbDirectory Then
                
                ' Unterordner löschen
                Call DelTree(sFolder & "\" & sCurrFile)
                
                ' Nächster Eintrag (Datei, Unterordner, ...)
                sCurrFile = Dir(sFolder & "\*.*", vbDirectory)
            
            ' Wenn nicht Ordner, sondern Datei
            Else
            
                ' diese Datei löschen
                Kill sFolder & "\" & sCurrFile
                sCurrFile = Dir
            End If
            
        ' Wenn Keine Einträge mehr vorhanden
        Else
    
            ' Variable zurücksetzen
            sCurrFile = Dir
        End If
        
    ' Wiederholen bis Ordner komplett leer
    Loop
    
    ' Am Ende noch den Ordner selber löschen
    RmDir sFolder
    
End Sub


Private Sub Command1_Click()
    Dim res
    
    res = MsgBox("Warnung! Alle Dateien und Unterordner des Pfades " _
            & Text1.Text & " werden gelöscht! Fortfahren?", vbOKCancel)
    If res = 1 Then
        DelTree (Text1.Text)  ' Aufruf der Funktion DelTree
    End If
End Sub


'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Projekt1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 5 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von arilou am 31.10.2008 um 14:11

Man kann im Beispiel nicht sFolder="*.*" setzen... das alte 'deltree /y *.*' kann durch 'rd /s /q *.*' nicht ersetzt werden, weil zweiteres keine Wildcards annimmt :'(

Kommentar von MaG am 21.10.2008 um 13:52

Eine Anpassung hätte ich - Kill kann auch Wildcards verwenden und wäre somit schneller(?!?)

Option Explicit

Public Sub DelTree(sFolder As String)
Dim sCurrFile As String

' Variable mit der Pfadangabe füllen
sCurrFile = Dir(sFolder & "\*.*", vbDirectory)
Kill sFolder & "\*.*"

' Prüfen ob Verzeichniss vorhanden
Do While Len(sCurrFile) > 0
' Wenn noch Dateien oder Unterordner vorhanden sind
If sCurrFile <> "." And sCurrFile <> ".." Then

' Wenn es sich dabei um einen Unterordner handelt
If (GetAttr(sFolder & "\" & sCurrFile) And vbDirectory) = _
vbDirectory Then

' Unterordner löschen
Call DelTree(sFolder & "\" & sCurrFile)

' Nächster Eintrag (Datei, Unterordner, ...)
sCurrFile = Dir(sFolder & "\*.*", vbDirectory)

' Wenn nicht Ordner, sondern Datei
End If

' Wenn Keine Einträge mehr vorhanden
Else

' Variable zurücksetzen
sCurrFile = Dir
End If

' Wiederholen bis Ordner komplett leer
Loop

' Am Ende noch den Ordner selber löschen
RmDir sFolder

End Sub

Kommentar von trommelwirbel am 11.08.2007 um 02:18

Man kann auch einfach 'ne alte Dosroutine dafür nutzen:

Shell(Environ("comspec") & " /c rd /s /q " + "(ZU LÖSCHENDES VERZEICHNISS)", AppWinStyle.Hide)

Kommentar von totdkb am 13.02.2005 um 01:25

Also für Ordner bzw Unterordner die ich per Hand anlege geht das ja.

Aber ich habe folgendes Problem.
Geht man auf www.chat.lycos.de als Gast in den Chat wird ein Ordner UserData mit Unterordnern angelegt (unter Dokumente und Einstellungen\Benutzername).

Der Tipp ist nicht in der Lage die Unterordner zu löschen - woran kann das liegen?

Kommentar von totdkb am 13.02.2005 um 01:22

Also für Ordner bzw Unterordner die ich per Hand anlege geht das ja.

Aber ich habe folgendes Problem.
Geht man auf www.chat.lycos.de als Gast in den Chat wird ein Ordner UserData mit Unterordnern angelegt (unter Dokumente und Einstellungen\Benutzername).

Der Tipp ist nicht in der Lage die Unterordner zu löschen - woran kann das liegen?