复制现有文件到一个新文件,将应用程序的进展通知回调函数.
#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 值. |
在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