Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0066: Mit einem Befehl mehrere Verzeichnisebenen erstellen

 von 

Beschreibung 

Mit der unten vorgestellten API ist es möglich eine komplette Verzeichnisstruktur beliebiger Tiefe zu generieren.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

MakeSureDirectoryPathExists (MakePath)

Download:

Download des Beispielprojektes [1,92 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 PROJECT1.VBP -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Textfeld "Text1"
' Steuerelement: Schaltfläche "Command1"

Option Explicit

Private Declare Function MakePath Lib "imagehlp.dll" _
        Alias "MakeSureDirectoryPathExists" (ByVal _
        lpPath As String) As Long

Private Sub Command1_Click()
  Dim Result&
    Result = MakePath(Text1.Text)
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei PROJECT1.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 Martin von Wittich am 12.09.2004 um 21:04

mir fällt grade auf, dass von dieser Funktion keine Unicode-Variante existiert... wer Unicode-kompatible Programme schreiben will, sollte sich also nach einer Alternative umsehen.

MfG Martin

Kommentar von MCWulf am 26.08.2004 um 16:57

Ok, hat sich erledigt ^^
Hat daran gelegen, dass dann der "Dateiname oder die Dateierweiterung" zu lang war (Also der Pfad)... sh!ce Windows eben XD

Kommentar von Michael Wolf am 26.08.2004 um 16:21

Irgendwie will der mir hier zur bis zur Ebene 5 (Neuer Ordner Ebene5 (10)) Ordner erstellen. Woran liegts?
[code]
Dim Result&
Text3.Text = "\Ordner_Versteck_By_MCWulf\VielSpassBeimSuchen\HeHeHe\"
Text2.Text = 3 'Kann auch höher sein, oder auch 2 sein, dauert halt dementsprechend lange...
For i9 = 1 To Text2.Text
For i8 = 1 To Text2.Text
For i7 = 1 To Text2.Text
For i6 = 1 To Text2.Text
For i5 = 1 To Text2.Text
For i2 = 1 To Text2.Text
For i = 1 To Text2.Text
For i3 = 1 To Text2.Text
For i4 = 1 To Text2.Text
DoEvents
Label3.Caption = "Ordner " & ((i9 - 1) * Text2.Text * Text2.Text * Text2.Text * Text2.Text * Text2.Text * Text2.Text * Text2.Text * Text2.Text) + ((i8 - 1) * Text2.Text * Text2.Text * Text2.Text * Text2.Text * Text2.Text * Text2.Text * Text2.Text) + ((i7 - 1) * Text2.Text * Text2.Text * Text2.Text * Text2.Text * Text2.Text * Text2.Text) + ((i6 - 1) * Text2.Text * Text2.Text * Text2.Text * Text2.Text * Text2.Text) + ((i5 - 1) * Text2.Text * Text2.Text * Text2.Text * Text2.Text) + ((i2 - 1) * Text2.Text * Text2.Text * Text2.Text) + ((i - 1) * Text2.Text * Text2.Text) + ((i3 - 1) * Text2.Text) + i & "/" & Text2.Text * Text2.Text * Text2.Text * Text2.Text * Text2.Text * Text2.Text * Text2.Text * Text2.Text * Text2.Text & " erstellt!"
Result = MakePath(App.Path & Text3.Text & "Neuer Ordner Ebene1 (" & i9 & ")\Neuer Ordner Ebene2 (" & i8 & ")\Neuer Ordner Ebene3 (" & i7 & ")\Neuer Ordner Ebene4 (" & i6 & ")\Neuer Ordner Ebene5 (" & i5 & ")\Neuer Ordner Ebene6 (" & i2 & ")\Neuer Ordner Ebene7 (" & i & ")\Neuer Ordner Ebene8 (" & i3 & ")\Neuer Ordner Ebene9 (" & i4 & ")\")
Next
Next
Next
Next
Next
Next
Next
Next
Next
[/code)

Kommentar von Thomas Müller am 30.09.2003 um 14:40

Private Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" (ByVal lpPathName As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type

Private Sub Command1_Click()
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
Dim Security As SECURITY_ATTRIBUTES
'Create a directory
Ret& = CreateDirectory("C:\Directory", Security)
'If CreateDirectory returns 0, the function has failed
If Ret& = 0 Then MsgBox "Error : Couldn't create directory !", vbCritical + vbOKOnly
End Sub


Dieser Befehl ist doch sicherer, da er mit der kernel32.dll arbeitet.
Mit ihm kann man zwar nur ein dir erstellen, aber mit einer kleien routine geht das ja auch für mehrere.
Ich benutze diesen befehl lieber als den vb eigenen mkdir, da es keine fehlermeldung gibt, wenn das dir schon existiert.

Gruss, Thomas

Kommentar von Peter Gut am 25.01.2002 um 19:23

Achtung!
Der Verpackungs- und Weitergabe-Assistent fügt die imagehlp.dll automatisch hinzu. Dies kann dazu führen, dass die dll auf dem Zielsystem durch eine falsche Version ersetzt wird (z.B. die Win98-Version durch die WinME-Version). Danach funktioniert's nicht mehr !!!