vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Verzeichnisbaum kopieren - Was ist falsch? 
Autor: Bringtnix
Datum: 11.03.04 06:56

Hallo,

vor ein paar Wochen hatte ich hier im Forum nach einer Möglichkeit gefragt unkompliziert einen ganzen Verzeichnisbaum zu kopieren. Habe auch promt Antworten mit Verweis auf einen Tipp bekommen. Soweit auch ganz wunderbar. Leider läuft es nicht gewünscht. Das Programm nimmt 99% Rechenkapazität in Anspruch und hängt sich anscheinend auf. Der von mir implementierte Zähler (soll die Verzeichnisse zählen) steht irgendwann im dreistelligen Millionenbereich.
Was ist falsch??? Anbei der Code..

In der Form (Start wird nach dem die Form geladen ist aufgerufen):
Sub Start()
  If StartMerker = True Then Exit Sub
  StartMerker = True
  lblInfo.Caption = "Info" & vbCrLf
  Select Case Command
    Case "All"
      Dim i As Integer
      For i = 0 To 3
        cmdKopieren_Click i
        lblInfo.Caption = lblInfo.Caption & Choose(i, "Eigene Dateien", "Eigene" & _
          "Webs", "Outlook oben", "Lexware") & " (" & BaumKopieren.Anzahl & ")" & _
          "fertig" & vbCrLf
      Next
      MsgBox "Fertig: " & BaumKopieren.Anzahl & " Verzeichnisse kopiert"
    Case Else
  End Select
End Sub
Private Sub cmdKopieren_Click(Index As Integer)
      'Ordner "d:\temp" mit allen Unterordnern und Dateien nach "e:\temp" 
      ' kopieren
      'DirCopy "d:\temp", "e:\temp"
  Select Case Index
    Case 0
      BaumKopieren.DirCopy "G:\Eigene Dateien", "I:\Eigene Dateien"
    Case 1
      BaumKopieren.DirCopy "G:\Eigene Webs", "I:\Eigene Webs"
    Case 2
      BaumKopieren.DirCopy "G:\Outlook Express", "I:\Outlook Express"
    Case 3
      BaumKopieren.DirCopy "E:\Programme\Lexware", "I:\Lexware"
  End Select
End Sub
Im Modul BaumKopieren:

Option Explicit
Public Anzahl As Long
' 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)
    AddAnzahl
  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
' 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
Sub AddAnzahl()
  DoEvents
  Anzahl = Anzahl + 1
  Hauptform.lblAnzahlKopiert = Anzahl
End Sub
Vielen Dank für die Hilfe im Voraus!

Carsten
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Verzeichnisbaum kopieren - Was ist falsch?686Bringtnix11.03.04 06:56

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle 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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel