vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Dateisystem · Ordner & Verzeichnisse   |   VB-Versionen: VB4, VB5, VB618.11.03
Ordner mit allen Dateien/Unterordner kopieren

Dieser Tipp zeigt, wie man ganze Verzeichnisebenen mit VB-Boardmitteln kopieren kann.

Autor:   David ÜblerBewertung:  Views:  33.549 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Manchmal muss man einen Ordner mit vielen verschachtelte Verzeichnissen kopieren. Hierfür braucht man nicht unbedingt zusätzliche DLLs oder sonstige Tools. Das Ganze lässt sicht nämlich auch mit VB Boardmitteln lösen.

Fügen Sie nachfolgenden Code in ein Modul ein:

' Funktion um alle Dateien eines Ordner zu ermitteln
Private Function ReadFilesFromDir(ByVal sPath As String, _
  Optional sFilter As String = "*.*") As Variant
 
  Dim sFilename As String
  Dim nCount As Long
  ReDim sFiles(0) As String
 
  If Right$(sPath, 1) <> "\" Then sPath = sPath & "\"
  nCount = 0
  sFilename = Dir(sPath & sFilter, vbNormal)
  While sFilename <> ""
    If sFilename <> "." And sFilename <> ".." Then
      ReDim Preserve sFiles(nCount)
      sFiles(nCount) = sFilename
      nCount = nCount + 1
    End If
    sFilename = Dir
  Wend
 
  ReadFilesFromDir = sFiles
End Function
' Funktion, um alle Ordner einer Ebene zu ermitteln
Private Function ReadDirs(ByVal sPath As String) As Variant
  Dim sFilename As String
  Dim nCount As Long
  ReDim sFiles(0) As String
 
  If Right$(sPath, 1) <> "\" Then sPath = sPath & "\"
  nCount = 0
  sFilename = Dir(sPath, vbDirectory)
  While sFilename <> ""
    If sFilename <> "." And sFilename <> ".." And _
      GetAttr(sPath & "\" & sFilename) = vbDirectory Then
 
      ReDim Preserve sFiles(nCount)
      sFiles(nCount) = sFilename
      nCount = nCount + 1
    End If
    sFilename = Dir
  Wend
 
  ReadDirs = sFiles
End Function

Die Hauptfunktion:

' Ordner inkl. aller Dateien und Unterordner kopieren
Public Function DirCopy(ByVal sDir As String, _
  ByVal dDir As String)
 
  Dim dcV As Variant, dcI As Integer
 
  On Error Resume Next
 
  ' zunächst alle Dateien ermitteln
  If sDir = dDir Then Exit Function
  dcV = ReadFilesFromDir(sDir)
 
  ' Ziel-Verzeichnis erstellen
  MkDir dDir
 
  ' alle Dateien kopieren
  For dcI = 0 To UBound(dcV)
    FileCopy sDir & "\" & dcV(dcI), dDir & "\" & dcV(dcI)
  Next dcI
 
  ' Jetzt alle Unterordner ermitteln und Dateien kopieren
  dcV = ReadDirs(sDir)
  For dcI = 0 To UBound(dcV)
    ' Es kann vorkommen, dass jemand den Ordner in sich
    ' selbst kopieren will - was eine Endlosschleife gäbe:
    If dcV(dcI) = "" Then Exit For
 
    ' Ziel-Unterordner erstellen:
    MkDir dDir & "\" & dcV(dcI)
 
    ' Rekursiver Funktionsaufruf, um den Unterordner
    ' zu erstellen und die Dateien zu kopieren
    DirCopy sDir & "\" & dcV(dcI), dDir & "\" & dcV(dcI)
  Next dcI
End Function

Beispiel für den Aufruf:

' Ordner "d:\temp" mit allen Unterordnern 
' und Dateien nach "e:\temp" kopieren
DirCopy "d:\temp", "e:\temp"



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.