FAQ 0058: Wie kann ich eine Datei oder ein Verzeichnis kopieren?
von Helge Rex
Frage
Wie kann ich eine Datei oder ein Verzeichnis kopieren?
Die hier gezeigten Quelltexte stammen von Udo Schmidt und Helge Rex.
Datei mit VB-Funktionen kopieren
Visual Basic stellt die Funktion FileCopy() zur Verfügung:
Private Sub TestSub() Dim strOldFile As String Dim strNewFile As String strOldFile = "C:\Programme\Microsoft Visual Studio\VB98\nwind.mdb" strNewFile = "C:\Programme\Microsoft Visual Studio\VB98\nordwind.mdb" FileCopy strOldFile, strNewFile End Sub
Listing 1: Datei mit FileCopy kopieren
Verzeichnis mit VB-Funktionen kopieren
Um mit den Funktionen, die VB zur Verfügung stellt, ein Verzeichnis samt Inhalt zu kopieren, muß man einige Umwege gehen, da VB keine Funktion hat, mit der man ein Verzeichnis kopieren kann.
Hierzu erstellt man das neue Verzeichnis mit MkDir(), ermittelt mit Dir() den Inhalt des Original-Verzeichnisses und kopiert diesen mittels FileCopy() in das neu erstellte Verzeichnis.
Datei mit API-Funktionen kopieren
Windows stellt die API-Funktion CopyFile zur Verfügung, um Dateien zu kopieren.
Private Declare Function CopyFile Lib "kernel32.dll" _ Alias "CopyFileA" ( _ ByVal lpExistingFileName As String, _ ByVal lpNewFileName As String, _ ByVal bFailIfExists As Long) As Long Private Sub TestSub() Dim strOldFile As String Dim strNewFile As String strOldFile = "C:\Programme\Microsoft Visual Studio\VB98\nwind.mdb" strNewFile = "C:\Programme\Microsoft Visual Studio\VB98\nordwind.mdb" CopyFile strOldFile, strNewFile, Abs(True) End Sub
Listing 2: Datei Mit CopyFile kopieren
Verzeichnis mit API-Funktionen kopieren
Udo Schmidt hat folgenden Code eingesandt, mit dem man neben Dateien auch Verzeichnisse kopieren kann.
Dabei wird die API-Funktion SHFileOperation verwendet.
Private Const shl_Copy As Long = 2 Private Type SHFileOpStruct hWnd As Long wFunc As Long pFrom As String pTo As String fFlags As Integer fAborted As Boolean hNameMaps As Long sProgress As String End Type Private Declare Function ShFileOperation Lib "shell32" Alias "SHFileOperationA" ( _ lpFileOp As SHFileOpStruct) As Long Private Sub TestSub() Dim fop As SHFileOpStruct Dim RT As Boolean Dim strNewFolder As String Dim strOldFolder As String strOldFolder = Environ$("WINDIR") & "\addins" strNewFolder = Environ$("WINDIR") & "\Kopie von addins" On Error Resume Next With fop .hWnd = 0 .wFunc = shl_Copy .pFrom = strOldFolder & vbNullChar & vbNullChar .pTo = strNewFolder & vbNullChar & vbNullChar .fFlags = &H250 End With RT = ShFileOperation(fop) ' Erfolgreich kopiert, wenn ' ((RT Or fop.fAborted) = 0) = True End Function
Listing 3: Mit SHFileOperation kopieren
Weitere Informationen sind in Den Shell-Dialog zum Kopieren nutzen [Tipp 0321] zu finden.
Datei mit WSH-Funktionen kopieren
Private Sub TestSub() Dim objFSO As Scripting.FileSystemObject Dim strNewFile As String Dim strOldFile As String strOldFile = "C:\Programme\Microsoft Visual Studio\VB98\nwind.mdb" strNewFile = "C:\Programme\Microsoft Visual Studio\VB98\nordwind.mdb" Set objFSO = New Scripting.FileSystemObject objFSO.CopyFile strOldFile, strNewFile Set objFSO = Nothing End Sub
Listing 4: Datei mit FSO kopieren
Verzeichnis mit WSH-Funktionen kopieren
Private Sub TestSub() Dim objFSO As Scripting.FileSystemObject Dim strNewFolder As String Dim strOldFolder As String strOldFolder = Environ$("WINDIR") & "\addins" strNewFolder = Environ$("WINDIR") & "\Kopie von addins" Set objFSO = New Scripting.FileSystemObject objFSO.CopyFolder strOldFolder, strNewFolder Set objFSO = Nothing End Sub
Listing 5: Verzeichnis mit FSO kopieren
Ihre Meinung
Falls Sie Fragen zu dieser FAQ haben, Ihre Erfahrung mit anderen Nutzern austauschen möchten oder auf eine Ergänzung hinweisen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.