ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 13.01.2000

Diese Seite wurde zuletzt aktualisiert am 13.01.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Zurück...


Anzeige

(-hg) mailto:hg_tiefepfade@aboutvb.de

Einen Pfad mit mehreren Ebenen in der Tiefe auf einen Schlag anzulegen, ist mit der Visual Basic-Funktion MSDN Library - VB MkDirMkDir ein recht mühsames Unterfangen. Wollten Sie beispielsweise der Pfad "c:\abc\def\ghi" anlegen, wenn selbst "c:\abc" noch nicht existiert, sähe das etwa so aus:

On Error Resume Next
MkDir "c:\abc"
MkDir "c:\abc\def"
MkDir "c:\abc\def\ghi"
On Error GoTo 0

So schon etwas aufwändig, würde es noch aufwändiger, wenn Sie das als allgemein verwendbare Funktion implementieren wollten:

Function CreatePathDeep(NewPath As String) As Boolean
  Dim nNewPath As String
  Dim nStart As Integer

  nNewPath = Trim$(NewPath)
  If Left$(nNewPath, 2) = "\\" Then
    If Len(nNewPath) > 6 Then
      nStart = 7
    Else
      Exit Function
    End If
  ElseIf Mid$(nNewPath, 2, 2) = ":\" Then
    nStart = 4
  Else
    Exit Function
  End If
  If nStart Then
    Do
      nPos = Instr(nStart, nNewPath, "\")
      If nPos Then
        On Error Resume Next
        MkDir Left$(nNewPath, nPos - 1)
        On Error GoTo 0
      Else
        On Error Resume Next
        MkDir nNewPath
        If Err.Number = 0 Then
          CreatePathDeep = True ' Erfolg
        End If
        On Error GoTo 0
      End If
    Loop While nPos
  End If
End Function

Vor Windows 98 können Sie mit der Funktion CreatePathDeep einen neuen Pfad mit mehreren Ebenen in der Tiefe anlegen

Für Windows-Versionen vor Windows 98 werden Sie nicht darum herum kommen, das so zu implementieren. Ab Windows 98 und unter Windows NT können Sie jedoch eine API-Funktion aus einer der System-DLLs (imagehlp.dll) verwenden.

Die Funktion MSDN Library - API MakeSureDirectoryPathExistsMakeSureDirectoryPathExists hält das Versprechen ihres Namens. Sie stellt sicher, dass der als Parameter übergebene Pfad nach ihrem Aufruf tatsächlich existiert - selbst wenn sie ihn erst anlegen muss. Das heißt - sie versucht zumindest, das Versprechen zu halten. Natürlich kann auch sie gegen nicht bereite Laufwerke oder Netzwerkpfade nichts ausrichten. Und ohne die entsprechenden Berechtigungen wird auch sie keine Pfade anlegen können. Den Erfolg meldet sie mit dem Rückgabewert 1 - bei Misserfolg ist dieser 0.

Sie erwartet allerdings einen abschließenden "\" bei der Übergabe des anzulegenden Pfades. Anderenfalls nimmt sie an, dass der letzte Teil ein Dateiname sein könnte und traut sich daher nicht, diesen Teil als Pfadbestandteil anzulegen. So rufen Sie sie zum Beispiel auf und prüfen den Erfolg:

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

' ...

If Not (CBool(MakeSureDirectoryPathExists("c:\abc\def\ghi\") Then
  MsgBox "Pfad konnte nicht angelegt werden."
End If

Mit einem simplen Aufruf der API-Funktion MakeSureDirectoryPathExists legen Sie einen neuen Pfad mit mehreren Ebenen in der Tiefe an

Wenn Sie die Funktion benötigen, um beispielsweise eine Datei, deren Zielpfad und Name in einem String zusammen vorliegen, in genau diesen Zielpfad zu kopieren, können Sie sich die Vorsicht der Funktion zunutze machen: Sie können den Pfadstring (eben einschließlich des Dateinamens) an sie übergeben, ohne ihn zuvor erst in Pfad und Dateinamen zerlegen zu müssen.

Wenn Sie sich jedoch nicht bei jedem Aufruf um den abschließenden "\" kümmern wollen, verpacken Sie die API-Funktion in eine eigene Funktion, CreatePath, die automatisch den abschließenden "\" hinzufügt, falls er fehlen sollte:

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

Public Function CreatePath(NewPath As String) As Boolean
  Dim nNewPath As String
  
  nNewPath = Trim$(NewPath)
  If Right$(nNewPath, 1) <> "\" Then
    nNewPath = nNewPath & "\"
  Else
    nNewPath = nNewPath
  End If
  CreatePath = CBool(MakeSureDirectoryPathExists(nNewPath))
End Function

Die Funktion CreatePath vereinfacht den Aufruf der API-Funktion MakeSureDirectoryPathExists


Modul modCreatePath (modCreatePath.bas - ca. 0,5 KB)






Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer