Zurück zur Homepage

Verzeichnis erstellen

Sie möchten ein nicht existierendes Verzeichnis samt Unterverzeichnissen erstellen?
Wollen sie ein komplettes Verzeichnis samt Unterverzeichnissen und Dateien in ein anderes, auch nicht vorhandenes, kopieren? Oder haben sie vor, ein vorhandenes Verzeichnis samt Unterverzeichnissen und Dateien löschen?
Ein paar API-Funktionen machen das, auch ohne das FileSystemObject.

Option Explicit

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

Private Declare Function SHFileOperation _
Lib "shell32.dll" Alias "SHFileOperationA" _
(lpFileOp As Any) As Long

Private Type SHFILEOPSTRUCT
    hwnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAnyOperationsAborted As Long
    hNameMappings As Long
    lpszProgressTitle As String
End Type

Private Const FO_DELETE = &H3
Private Const FO_MOVE = &H1
Private Const FO_RENAME = &H4
Private Const FO_COPY = &H2&
Private Const FOF_RENAMEONCOLLISION = &H8
Private Const FOF_NOCONFIRMMKDIR = &H200
Private Const FOF_NOCONFIRMATION = &H10
Private Const FOF_MULTIDESTFILES = &H1
Private Const FOF_ALLOWUNDO = &H40

Sub TestPfadErstellen()
  
PfadErstellen "c:\Test\Test\Test"
End Sub

Public Function PfadErstellen(Pfad As String) As Boolean
Dim a As Long
  If Right$(Pfad, 1) <> "\" Then
    Pfad = Pfad & "\"
  End If
  If MakePath(Pfad) <> 0 Then PfadErstellen = True
End Function

 

Sub TestXXL_Kopie()
Dim FF As Long
Dim Pfad As String
  Pfad = "c:\Test\Test\Test"
  FF = FreeFile
  PfadErstellen Pfad
  Open Pfad & "\DATEI1" For Binary As FF: Close FF
  Open Pfad & "\DATEI2" For Binary As FF: Close FF
  XXL_Copy Pfad & "\*", Pfad & "\Kopie\"
End Sub

Public Function XXL_Copy(ByVal QuellVerzeichnis As String, _
ByVal Zielverzeichnis As String) As Boolean
Dim udtXCopy As SHFILEOPSTRUCT
  QuellVerzeichnis = QuellVerzeichnis & _
  vbNullChar & vbNullChar
  Zielverzeichnis = Zielverzeichnis & _
  vbNullChar & vbNullChar
  With udtXCopy
    .wFunc = FO_COPY
    .pFrom = QuellVerzeichnis
    .pTo = Zielverzeichnis
    .fFlags = FOF_MULTIDESTFILES _
    Or FOF_NOCONFIRMATION _
    Or FOF_NOCONFIRMMKDIR _
    Or FOF_ALLOWUNDO
  End With
  If SHFileOperation(udtXCopy) = 0 _
  Then XXL_Copy = True
End Function 

Sub TestVerzeichnisLöschen()
  
VerzeichnisLöschen "c:\Test"
End Sub

 

Function VerzeichnisLöschen(Verzeichnis As String) As Boolean
Dim QuellVerzeichnis As String, Zielverzeichnis As String
Dim Pfad As String
Dim udtFileOP As SHFILEOPSTRUCT
  If Dir$(Verzeichnis, vbDirectory) = "" Then Exit Function
  VerzeichnisLöschen = True
  QuellVerzeichnis = Verzeichnis _
  & vbNullChar & vbNullChar
  Zielverzeichnis = vbNullString & _
  vbNullChar & vbNullChar
  With udtFileOP
    .wFunc = FO_DELETE
    .pFrom = Verzeichnis
    .pTo = Zielverzeichnis
    .fFlags = FOF_MULTIDESTFILES _
    Or FOF_NOCONFIRMATION _
    Or FOF_NOCONFIRMMKDIR '_
    'Or FOF_ALLOWUNDO ' In den Papierkorb
  
End With
  If SHFileOperation(udtFileOP) <> 0 _
  Then VerzeichnisLöschen = False
End Function