一个很简单的问题:如何异步复制文件,显示进度,并且能够中途取消复制。最好能有代码 谢谢:) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CopyFileEx可以实现这个功能:)嗬嗬,看看msdn的说明就足够了:) http://vip.6to23.com/NowCan1/tech/copyex.htm 或者干脆用Shell函数ShellFileOperation 函数名好像不对,是ShFileOperation? :)所以写在了线程版里了呀我自己找到了两个http://www.codeproject.com/internet/ftpwanderer.asphttp://www.codeguru.com/internet/ftp_download.shtml #include "winbase.h"BOOL CopyFlag;BOOL pbCancel;DWORD dwThreadId;HANDLE hThread; DWORD CALLBACK CopyProgressRoutine( LARGE_INTEGER TotalFileSize, // total file size, in bytes LARGE_INTEGER TotalBytesTransferred, // total number of bytes transferred LARGE_INTEGER StreamSize, // total number of bytes for this stream LARGE_INTEGER StreamBytesTransferred, // total number of bytes transferred for // this stream DWORD dwStreamNumber, // the current stream DWORD dwCallbackReason, // reason for callback HANDLE hSourceFile, // handle to the source file HANDLE hDestinationFile, // handle to the destination file LPVOID param // passed by CopyFileEx){//if(TotalBytesTransferred*100%TotalFileSize){((CDbfUpdateDlg*)param)->m_ShowProgress.SetRange32(1,100); ((CDbfUpdateDlg*)param)->m_ShowProgress.SetPos(TotalBytesTransferred.QuadPart*100/TotalFileSize.QuadPart); }if(pbCancel)return TRUE;return FALSE;}DWORD CopyThreadFunc(LPDWORD param){ pbCancel=FALSE; CopyFileEx( ((CDbfUpdateDlg*)param)->CopyFileName.SFile, ((CDbfUpdateDlg*)param)->CopyFileName.DFile, CopyProgressRoutine, param, &pbCancel, COPY_FILE_FAIL_IF_EXISTS ); return 0;}//说明 CopyThreadFunc(LPDWORD param) 创建一线程进行文件拷贝CopyProgressRoutine为CopyFileEx的回调函数返回true则拷贝停止,可以在其中显示进度 VS2008使用分析器蓝屏 连接数据库的程序和保存的目录有什么关系呀 采用Manifest方式美化界面之后打开文档出现乱码问题? 高手指点(RichText问题) 请您关注 动态生成组件的事件如何获得? 请问如何把视频流显示在我的单文档的视图中啊?解决的马上给分! 请问在树型控件里,如何让右键也能选中结点或得到右键点中那个结点的句柄? CGI程序的小问题,请大家帮忙,谢谢,在线等待!!! AlphaBlend 在mousemove函数中怎么清除上一次的FillSolidRect设置的半透明 关于去掉"请键入一个整数"的问题 如何从这些信息当中得到算法?急!正在求救....等待救世主....
嗬嗬,看看msdn的说明就足够了:)
所以写在了线程版里了呀
我自己找到了两个http://www.codeproject.com/internet/ftpwanderer.asp
http://www.codeguru.com/internet/ftp_download.shtml
BOOL CopyFlag;
BOOL pbCancel;
DWORD dwThreadId;
HANDLE hThread;
DWORD CALLBACK CopyProgressRoutine(
LARGE_INTEGER TotalFileSize, // total file size, in bytes
LARGE_INTEGER TotalBytesTransferred,
// total number of bytes transferred
LARGE_INTEGER StreamSize, // total number of bytes for this stream
LARGE_INTEGER StreamBytesTransferred,
// total number of bytes transferred for
// this stream
DWORD dwStreamNumber, // the current stream
DWORD dwCallbackReason, // reason for callback
HANDLE hSourceFile, // handle to the source file
HANDLE hDestinationFile, // handle to the destination file
LPVOID param // passed by CopyFileEx
)
{
//if(TotalBytesTransferred*100%TotalFileSize)
{
((CDbfUpdateDlg*)param)->m_ShowProgress.SetRange32(1,100);
((CDbfUpdateDlg*)param)->m_ShowProgress.SetPos(TotalBytesTransferred.QuadPart*100/TotalFileSize.QuadPart);
}
if(pbCancel)return TRUE;
return FALSE;
}
DWORD CopyThreadFunc(LPDWORD param)
{
pbCancel=FALSE;
CopyFileEx(
((CDbfUpdateDlg*)param)->CopyFileName.SFile,
((CDbfUpdateDlg*)param)->CopyFileName.DFile,
CopyProgressRoutine,
param,
&pbCancel,
COPY_FILE_FAIL_IF_EXISTS
);
return 0;
}
//说明 CopyThreadFunc(LPDWORD param)
创建一线程进行文件拷贝
CopyProgressRoutine为CopyFileEx的回调函数
返回true则拷贝停止,可以在其中显示进度