例子
// ConsoleApplication2.cpp : Defines the entry point for the console application.
//
#include
"stdafx.h"
#include
<stdio.h>
#include
<windows.h>
#include
<iostream>
using
namespace
std;
DWORD
CALLBACK
CopyProgress(
LARGE_INTEGER
TotalFileSize
,
// 总文件的大小以字节为单位
LARGE_INTEGER
TotalBytesTransferred
,
// 复制操作开始以来 从原文件转移到目标文件的字节总数
LARGE_INTEGER
StreamSize
,
// 以字节为单位 当前文件流的总大小
LARGE_INTEGER
StreamBytesTransferred
,
// 当前流中的字节数,复制操作开始以来,已从源文件移交到目标文件的总数
DWORD
dwStreamNumber
,
// 当前流的句柄。第一次调用 CopyProgressRoutine 时,流编号是 1。
DWORD
dwCallbackReason
,
// 以下值之一CALLBACK_CHUNK_FINISHED:数据文件的另一部分被复制。CALLBACK_STREAM_SWITCH:另一个流被创造并且将被复制。这是给出了第一次调用回调例程时的回调原因。
HANDLE
hSourceFile
,
//源文件的句柄。
HANDLE
hDestinationFile
,
// 目标文件的句柄。
LPVOID
lpData
// CopyFileEx等函数传递的参数
)
{
static
int
nRecord = 0;
nRecord++;
cout
<<
"回调的次数:"
<<
nRecord
<<
"已传输"
<<
TotalBytesTransferred
.LowPart
<<
"文件大小:"
<<
TotalFileSize
.LowPart
<<
"\n"
;
return
PROGRESS_CONTINUE
;
}
int
main(
LPCWSTR
argc
,
LPCWSTR
argv
[])
{
if
(!
CopyFileEx
(
L"J://boost_1_60_0.zip"
,
L"K://1.zip"
, (
LPPROGRESS_ROUTINE
)CopyProgress,
NULL
,
FALSE
,
COPY_FILE_FAIL_IF_EXISTS
))
{
printf(
"CopyFileEx() failed."
);
return
0;
}
}