我拷贝一个很大的文件,我想做一个文件拷贝的进度条,我的问题是:我怎么知道自己拷贝了多少文件,已经拷贝多少比例到硬盘上来?怎么得到已经拷贝了多少文件,顺便说一下是不能够用GetDiskFreeSpaceEx()和GetDiskFreeSpace来求的。
万分感谢!
解决方案 »
- 如何修改一个exe或dll文件,在其中增加一段代码(新增代码比较大)
- 大家使用界面库GuiLib的时候,他原本的UNICODE大家怎么处理的
- For语句中定义的变量,在该for语句外怎么没有失效呢?
- 能否实现当用户添加网址到收藏夹的时候,将这个网址传送到远端服务器?
- 有没有 将整数转化为书写这个整数的字符串的 API函数 ? 谢谢!
- 读文件夹中记事本的方法?
- 如何实现这样监控程序?????? ------ 给分68
- 关于C RunTime Library的讨论,参与有分
- 关于在按钮上显示TOOLTIP
- 在vc中右击函数名选定位怎么说没定义啊
- 求CMemFile用法,请给例程
- 用DAO创建完数据库,用ADO来进行操作,结果显示头文件里有重复定义。。。
BOOL CopyFileEx(
LPCTSTR lpExistingFileName,
LPCTSTR lpNewFileName,
LPPROGRESS_ROUTINE lpProgressRoutine,
LPVOID lpData,
LPBOOL pbCancel,
DWORD dwCopyFlags
);
if(dirDlg.DoModal()==IDOK)
{
CString strPath = dirDlg.GetPathname();
CMainFrame *pMF = (CMainFrame *)AfxGetMainWnd();
CString str = pMF->szDataFilePath;
str+=strbakfilename;//要备份的源文件名称;
char FromFileName[255] ="\0";
char ToFileName[255] ="\0";
strcpy(ToFileName,strPath);
if(copyfolder)
{
strcat(ToFileName,"\\");
strcat(ToFileName,strbakfilename);
strcat(ToFileName,"\\");//???
strbakfilename+= "\\*.*";//为目录;
strcpy(FromFileName,str);
}else
{
strcpy(FromFileName,str);//要备份的源文件名称;
strcat(ToFileName,"\\");
strcat(ToFileName,strbakfilename);//目标文件名称; }
strcat(FromFileName,"\0");
strcat(ToFileName,"\0");
SHFILEOPSTRUCT lpFileOp;
lpFileOp.hwnd = GetSafeHwnd();
lpFileOp.wFunc = FO_COPY;
lpFileOp.pFrom = FromFileName;
lpFileOp.pTo = ToFileName;
lpFileOp.fFlags = FOF_ALLOWUNDO;
lpFileOp.fAnyOperationsAborted = FALSE;
lpFileOp.hNameMappings = NULL;
lpFileOp.lpszProgressTitle = NULL;
int rval = SHFileOperation(&lpFileOp);
if(rval==0)
{
MessageBox("备份完成");
CString sttemp=_T("");
sttemp.Format("%s记录备份完成",strbakfilename);
SaveSystemInfoData(pMF->szCurrentPath,"",sttemp.GetBuffer(0));
}
else
{
MessageBox( "备份失败");
} }
用这个吧。人家自己会出现进度条
然后一次copy 1M, 直到copy 完成, 这样比例和已经拷贝的字节数就都知道了,由于是个死循环,所以如果你要刷新进度条的话还必须在循环体中调用函数DoEvents();
void DoEvents()
{
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return;
}
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 lpData // passed by CopyFileEx
)
{ //在这里更新progressbar,lpData可以传CProgress的指针。printf("%08X:%08X of %08X:%08X copied.\n",TotalBytesTransferred.HighPart,TotalBytesTransferred.LowPart,TotalFileSize.HighPart,TotalFileSize.LowPart);
return PROGRESS_CONTINUE;
}
int main(int argc,char **argv)
{
int Cancel=FALSE;
if(argc!=3)
{
printf("CopyEx Src Dst\n");
return 0;
}
if(!CopyFileEx(argv[1],argv[2],(LPPROGRESS_ROUTINE)CopyProgress,NULL,&Cancel,COPY_FILE_FAIL_IF_EXISTS))
{
printf("CopyFileEx() failed.\n");
return 0;
} return 0;
}
你inlude了什么文件?
真的好奇怪!error C2065: 'CopyFileEx' : undeclared identifier
error C2065: 'LPPROGRESS_ROUTINE' : undeclared identifier谢谢,帮帮忙!
不行啊
还是这样啊