Rubrik: Dateisystem · Dateien allgemein | VB-Versionen: VB4, VB5, VB6 | 25.10.04 |
Kopieren von geöffneten Dateien Mit der CopyFile-Funktion aus dem Windows-API lassen sich Dateien auch dann kopieren, wenn diese von einer anderen Anwendung geöffnet sind. | ||
Autor: Dieter Otter | Bewertung: | Views: 32.267 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Soll eine Datei von "A" nach "B" kopiert werden, verwendet man im Allgemeinen den VB-interne "FileCopy"-Befehl. Das funktioniert auch gut, solange die Quelldatei nicht von einer anderen Anwendung geöffnet ist. In diesem Fall quittiert uns VB den Versuch, die Datei zu kopieren, mit dem Laufzeitfehler "70 - Zugriff verweigert".
Das Windows-API bietet uns aber glücklicherweise eine Alternative zum FileCopy-Befehl von VB, mit der sich auch geöffnete Dateien ohne Probleme kopieren lassen.
Option Explicit ' Benötigte API-Deklaration Private Declare Function CopyFile Lib "kernel32" _ Alias "CopyFileA" ( _ ByVal lpExistingFileName As String, _ ByVal lpNewFileName As String, _ ByVal bFailIfExists As Long) As Long ' Ersetzen des FileCopy-Befehls von VB :-) Public Function FileCopy(ByVal sSourceFile As String, _ ByVal sDestFile As String, _ Optional ByVal bAlwaysOverwrite As Boolean = True) As Boolean Dim nResult As Long nResult = CopyFile(sSourceFile, sDestFile, CLng(Abs(Not bAlwaysOverwrite))) FileCopy = (nResult <> 0) End Function
Im Gegensatz zur VB-internen FileCopy-Anweisung lässt jetzt ab sofort auch noch angeben, ob der Kopiervorgang abgebrochen werden soll, falls die Zieldatei bereits existiert. Die Funktion selbst gibt zudem noch einen Wert zurück, der Aufschluß darüber gibt, ob der Kopiervorgang erfolgreich war (True) oder nicht (False).
Beispiel:
Öffnen Sie eine beliebige MDB-Datei mit MS-Access.
Versuchen Sie nun die geöffnete MDB-Datei mit dem VB-internen FileCopy-Befehl zu kopieren:
VBA.FileCopy "c:\eigene dateien\db1.mdb", "d:\db1.mdb"
VB löst beim Aufruf der FileCopy-Anweisung den Laufzeitfehler 70 aus!
Jetzt fügen Sie obigen Code in Ihr Projekt ein und starten den Kopiervorgang erneut:
MsgBox FileCopy("c:\eigene dateien\db1.mdb", "d:\db1.mdb")
Resultat: Die geöffnete MDB-Datei konnte ohne Probleme kopiert werden!