Die Community zu .NET und Classic VB.
Menü

FAQ 0058: Wie kann ich eine Datei oder ein Verzeichnis kopieren?

 von 

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.