Funktionreferenz


_WinAPI_CopyFileEx

Beschreibung anzeigen in

Kopiert eine vorhandene Datei in eine neue Datei und benachrichtigt die Anwendung über eine Callback-Funktion über ihren Fortschritt

#include <WinAPIFiles.au3>
_WinAPI_CopyFileEx ( $sExistingFile, $sNewFile [, $iFlags = 0 [, $pProgressProc = 0 [, $pData = 0]]] )

Parameter

$sExistingFile Der Name der existierenden Datei.
$sNewFile Der Name der neuen Datei.
$iFlags [optional] Die Flags welche angeben wie die Datei kopiert werden soll. Dieser Wert kann eine Kombination der folgenden Werte sein:
    $COPY_FILE_ALLOW_DECRYPTED_DESTINATION (0x0008) (Ein Versuch, eine verschlüsselte Datei zu kopieren, ist auch dann erfolgreich, wenn die Zielkopie nicht verschlüsselt werden kann.)
    $COPY_FILE_COPY_SYMLINK (0x0800) (Wenn es sich bei der Quelldatei um einen symbolischen Link handelt, ist die Zieldatei auch ein symbolischer Link, der auf dieselbe Datei verweist, auf die der symbolische Quelllink verweist.)
    $COPY_FILE_FAIL_IF_EXISTS (0x0001) (Der Kopiervorgang schlägt sofort fehl, wenn die Zieldatei bereits vorhanden ist.)
    $COPY_FILE_NO_BUFFERING (0x1000) (Die Kopieroperation wird unter Verwendung ungepufferter E/A ausgeführt, wobei die System-E/A-Cache-Ressourcen umgangen werden. Empfohlen für sehr große Dateiübertragungen.)
    $COPY_FILE_OPEN_SOURCE_FOR_WRITE (0x0004) (Die Datei wird kopiert und die Originaldatei wird für den Schreibzugriff geöffnet.)
    $COPY_FILE_RESTARTABLE (0x0002) (Der Fortschritt der Kopie wird in der Zieldatei nachverfolgt, falls die Kopie fehlschlägt. Die fehlgeschlagene Kopie kann zu einem späteren Zeitpunkt erneut gestartet werden, indem dieselben Werte für lpExistingFileName und lpNewFileName wie für den fehlgeschlagenen Aufruf angegeben werden. Dies kann den Kopiervorgang erheblich verlangsamen, da die neue Datei während des Kopiervorgangs mehrmals geleert wird.)
$pProgressProc [optional] Die Adresse einer Callback-Funktion, die jedes Mal aufgerufen wird, wenn ein anderer Teil der Datei kopiert wurde.
(Siehe MSDN für mehr Informationen)
$pData [optional] Zeiger auf ein Argument, das an die RCallback-Funktion übergeben werden soll. Kann NULL sein.

Rückgabewert

Erfolg: True.
Fehler: False. Es ist _WinAPI_GetLastError() aufzurufen um erweiterte Fehlerinformationen zu erhalten.

Bemerkungen

$COPY_* , $PROGRESS_* Konstanten benötigen #include <APIFilesConstants.au3>

Siehe auch

Suche nach CopyFileEx in der MSDN Bibliothek.

Beispiel

#include <APIFilesConstants.au3>
#include <Misc.au3>
#include <WinAPIError.au3>
#include <WinAPIFiles.au3>

Opt('TrayAutoPause', 0)

Local $hProgressProc = DllCallbackRegister('_ProgressProc', 'bool', 'uint64;uint64;uint64;uint64;dword;dword;handle;handle;ptr')

FileDelete(@TempDir & '\Test*.tmp')

ProgressOn('_WinAPI_CopyFileEx()', 'Erstellung einer großen Datei...', '')
Local $sFile = @TempDir & '\Test.tmp'
Local $hFile = FileOpen($sFile, 2)
For $i = 1 To 1000000
    FileWriteLine($hFile, "                                                     ")
Next
FileClose($hFile)

ProgressOn('_WinAPI_CopyFileEx()', 'Kopieren...', '0%')

If Not _WinAPI_CopyFileEx($sFile, @TempDir & '\Test1.tmp', 0, DllCallbackGetPtr($hProgressProc)) Then
    _WinAPI_ShowLastError('Fehler beim kopieren ' & $sFile)
EndIf

DllCallbackFree($hProgressProc)

ProgressOff()

FileDelete(@TempDir & '\Test*.tmp')

Func _ProgressProc($iTotalFileSize, $iTotalBytesTransferred, $iStreamSize, $iStreamBytesTransferred, $iStreamNumber, $iCallbackReason, $hSourceFile, $hDestinationFile, $pData)
    #forceref $iStreamSize, $iStreamBytesTransferred, $iStreamNumber, $iCallbackReason, $hSourceFile, $hDestinationFile, $pData

    Local $iPercent = Round($iTotalBytesTransferred / $iTotalFileSize * 100)
    If $iPercent = 100 Then
        ProgressSet($iPercent, '', 'Fertig')
    Else
        ProgressSet($iPercent, $iPercent & '%')
    EndIf
    Sleep(10) ; Kopierprozess verlangsamen, um die Progressbar zu sehen

    If _IsPressed('1B') Then
        Return $PROGRESS_CANCEL
    Else
        Return $PROGRESS_CONTINUE
    EndIf
EndFunc   ;==>_ProgressProc