VB 5/6-Tipp 0558: Deltree-Funktion
von NoOne
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: | Verwendete API-Aufrufe: keine | Download: |
'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-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
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?