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 30.05.2000

Diese Seite wurde zuletzt aktualisiert am 30.05.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...

Ordner-Struktur kopieren

Zurück...


Anzeige

(-hg) mailto:hg_copyfolders@aboutvb.de

Die ab Visual Basic 6 standardmäßig zur Verfügung stehende Scripting-Komponente erlaubt einen komfortablen Umgang mit Ordnern und Dateien und bietet bequeme Dateioperationen. Während das Verschieben eines kompletten Ordners samt Unterordnern und Dateien zwar auch mit der Visual Basic-Anweisung Name erreicht werden kann, gibt es keine entsprechende Anweisung zum vollständigen Kopieren eines Ordners samt Inhalt. Das FileSystemObject oder das Folder-Objekt der Scripting-Komponente bieten dagegen diese Möglichkeit.

Jedoch bieten weder diese Scripting-Objekte noch VB noch das Windows-API die Möglichkeit, eine Ordner-Struktur zwar komplett, aber ohne die darin enthaltenen Dateien zu kopieren.

Mit der hier vorgestellten Prozedur CopyFolders können Sie auch diese Aufgabe lösen, neben dem standardmäßigen Kopieren eines Ordners inklusive Unterordnern und Dateien. Darüber hinaus bietet sie sogar die Möglichkeit, statt die vorhandenen Dateien vollständig zu kopieren, nur leere Dateien mit gleichem Namen und gleicher Dateierweiterung in den Zielordnern anzulegen (auf diese Möglichkeit bin ich kürzlich angesprochen worden - daher habe ich sie einfach mal mit eingebaut, auch wenn ich keinen sinnvollen Verwendungszweck sehe...).

Sie übergeben der Prozedur den Quellpfad und den Zielpfad und geben gegebenenfalls im optionalen Parameter CopyMode an, ob der Ordner eins zu eins mit allem Inhalt (cfCopyFiles aus der Enumeration CopyFoldersConstants, Voreinstellung) oder nur die leere Ordner-Struktur (cfFolderStructureOnly) kopiert werden soll, oder ob die Ordner-Struktur kopiert und leere Dateien angelegt werden sollen. Im letzten optionalen Parameter Overwrite geben Sie an, ob gegebenenfalls bereits vorhandene Ordner und Dateien überschrieben werden sollen.

Das komplette Kopieren erledigt die Prozedur selbst. Interessant ist hier vielleicht die Verwendung des MSDN Library - VB Imp OperatorImp-Operators zur Entscheidung, ob bei der Angabe von Overwrite gleich True der Ordner kopiert werden soll. Dazu wird das Ergebnis der Prüfung, ob der Ordner bereits existiert, über den Imp-Operater mit der Overwrite-Angabe verknüpft. Entsprechend der Wahrheitstabelle dieses Operators wird de Kopie nur dann nicht ausgeführt, wenn der Ordner bereits existiert und die Anweisung zum Überschreiben per Overwrite nicht erfolgt ist.

Soll die leere Ordnerstruktur kopiert werden und sollen gegebenenfalls die leeren Dateien angelegt werden, wird die private Hilfsprozedur zCopyFolders rekursiv aufgerufen - für den Startordner und für jeden seiner Unterordner (SubFolders-Collection des Folder-Objekts) - und wiederum für die Unterordner der Unterordner usw. Dort wird dann jeweils ein neuer Ordner in der jeweiligen Position neu angelegt. Die Frage nach dem Überschreiben kann hier entfallen - lediglich ein bereits vorhandener Ordner braucht ja nicht neu angelegt zu werden. Sollen auch die leeren Dateien angelegt werden, erfolgt das für jeden Ordner anschließend nach dem Lauf durch die SubFolders-Collection. Auch hier wird wieder die Prüfung der Existenz einer Datei über den Imp-Operator mit der Overwrite-Angabe verknüpft, bevor die leere Datei angelegt wird.

Public Enum CopyFoldersConstants
  cfCopyFiles
  cfFolderStructureOnly
  cfCreateFiles
End Enum

Public Sub CopyFolders(SourcePath As String, _
 DestPath As String, _
 Optional ByVal CopyMode As CopyFoldersConstants = cfCopyFiles, _
 Optional ByVal Overwrite As Boolean)

  Dim nFSO As FileSystemObject
  Dim nDestPath As String
  
  Set nFSO = New FileSystemObject
  If CopyMode = cfCopyFiles Then
    With nFSO
      nDestPath = .BuildPath(DestPath, .GetBaseName(SourcePath))
      If .FolderExists(nDestPath) Imp Overwrite Then
        .CopyFolder SourcePath, nDestPath, Overwrite
      End If
    End With
  Else
    zCopyFolders nFSO.GetFolder(SourcePath), DestPath, nFSO, _
     CBool(CopyMode = cfCreateFiles), Overwrite
  End If
End Sub

Private Sub zCopyFolders(SourceFolder As Folder, _
 DestPath As String, FSO As FileSystemObject, _
 ByVal CreateFiles As Boolean, ByVal Overwrite As Boolean)

  Dim nDestFolder As Folder
  Dim nDestPath As String
  Dim nSubFolder As Folder
  Dim nFile As File
  Dim nFileName As String
  
  With FSO
    nDestPath = .BuildPath(DestPath, SourceFolder.Name)
    If Not .FolderExists(nDestPath) Then
      Set nDestFolder = .CreateFolder(nDestPath)
    End If
    For Each nSubFolder In SourceFolder.SubFolders
      zCopyFolders nSubFolder, nDestPath, FSO, CreateFiles, _
       Overwrite
    Next
    If CreateFiles Then
      For Each nFile In SourceFolder.Files
        nFileName = .BuildPath(nDestPath, nFile.Name)
        If .FileExists(nFileName) Imp Overwrite Then
          .CreateTextFile nFileName, Overwrite
        End If
      Next
    End If
  End With
End Sub

Beachten Sie bitte, dass Sie zur Verwendung dieses Moduls einen Verweis auf die Scripting-Komponente (SCRRUN.DLL) in Ihr Projekt einbinden müssen. Wenn Sie die Objekte dieser Komponente noch nicht näher kennen sollten, erforschen Sie doch diese einmal im Objekt-Katalog - die Dokumentation zu jedem Objekt, jeder Methode und Eigenschaft ist jeweils nur einen F1-Tastendruck weit entfernt...


Modul modCopyFolders (modCopyFolders.bas - ca. 2 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
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