函数参考


_WinAPI_CopyFileEx

复制现有文件到一个新文件,将应用程序的进展通知回调函数.

#Include <WinAPIEx.au3>
_WinAPI_CopyFileEx ( $sExistingFile, $sNewFile [, $iFlags [, $pProgressProc [, $pData] )

参数

$sExistingFile 现有文件的名称.
$sNewFile 新文件的名称.
$iFlags [可选参数] 指定如何复制文件.参数可以是以下值的组合:

$COPY_FILE_ALLOW_DECRYPTED_DESTINATION --- 即使目的副本不能加密,也将加密文件复制成功.不支持Window 2000.
$COPY_FILE_COPY_SYMLINK --- 如果源文件是符号链接,目标文件也是符号链接,并指向同一源符号链接位置.不支持 Windows Server 2003 和 Windows XP/2000
$COPY_FILE_FAIL_IF_EXISTS --- 如果目标文件已存在,复制操作立即失败 .
$COPY_FILE_NO_BUFFERING --- 复制操作使用无缓冲的 I/O,绕过系统 I/O 缓存资源.推荐传送非常大的文件.不支持 Windows Server 2003 和 Windows XP/2000
$COPY_FILE_OPEN_SOURCE_FOR_WRITE --- 文件被复制并打开原文件进行写访问.
$COPY_FILE_RESTARTABLE --- 跟踪目标文件复制进度,防止复制失败
$pProgressProc [可选参数] 回调函数,每次调用该文件已复制的另一部分地址

(为了解更多信息,请参见 MSDN)
$pData [可选参数] 传递给回调函数得参数.

返回值

成功: 返回 1.
失败: 返回 0,并设置@error标志为非 0 值.

注意/说明

None

相关

详情参考

在MSDN中搜索


示例/演示


#Include <APIConstants.au3>
#Include <Misc.au3>
#Include <WinAPIEx.au3>

Opt('MustDeclareVars', 1)
Opt('TrayAutoPause', 0)

Global $hProgressProc = DllCallbackRegister('_ProgressProc', 'dword', 'uint64;uint64;uint64;uint64;dword;dword;ptr;ptr;long_ptr')

ProgressOn('_WinAPI_CopyFileEx', 'Copying...', '', -1, -1, 2)

_WinAPI_CopyFileEx('D:\Test.tmp', 'C:\Test.tmp', 0, DllCallBackGetPtr($hProgressProc))
If @error Then
    _WinAPI_ShowLastError()
EndIf

DllCallbackFree($hProgressProc)

ProgressOff()

Func _ProgressProc($iTotalFileSize, $iTotalBytesTransferred, $iStreamSize, $iStreamBytesTransferred, $iStreamNumber, $iCallbackReason, $hSourceFile, $hDestinationFile, $iData)

    Local $Percent = Round($iTotalBytesTransferred / $iTotalFileSize * 100)

    If $Percent = 100 Then
        ProgressSet($Percent, '', 'Complete')
    Else
        ProgressSet($Percent)
    EndIf
    If _IsPressed('1B') Then
        Return $PROGRESS_CANCEL
    Else
        Return $PROGRESS_CONTINUE
    EndIf
EndFunc   ;==>_ProgressProc