●别以为这道题简单● 做个带进度条的对话框,使FILE *用fread,fwrite一个字节一个字节复制,进度条一个一个增加,嘻嘻,累不累啊…… 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //copy一个目录下的所有文件(每次读取最长dwReadLen)//m_CAll为整体进度条m_CFile为当前copy中的文件进度条(类型是:CProgressCtrl) AfxGetApp()->BeginWaitCursor(); TCHAR lpFileName[MAX_PATH]=_T("D:\\*.*"); WIN32_FIND_DATA FindFileData; // data buffer HANDLE hFirst=FindFirstFile(lpFileName,&FindFileData); LONGLONG llTotalLen=0; while(::FindNextFile(hFirst,&FindFileData)) { llTotalLen+=(FindFileData.nFileSizeHigh * ((LONGLONG)MAXDWORD+1)) + FindFileData.nFileSizeLow; } hFirst=FindFirstFile(lpFileName,&FindFileData); DWORD dwbuf[0x00004000]; CFile srcFile,dstFile; DWORD dwReadLen=sizeof(DWORD)*0x0004000, dwCount,dwFinish=0; while(::FindNextFile(hFirst,&FindFileData)) { if(!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { CString srcFileName("D:\\"); srcFileName+=FindFileData.cFileName; DWORD dwFinishInFile=0; LONGLONG llFileLen=(FindFileData.nFileSizeHigh * ((LONGLONG)MAXDWORD+1)) + FindFileData.nFileSizeLow; srcFile.Open(srcFileName,CFile::modeRead); CString dstFileName(FindFileData.cFileName); dstFileName=_T("D:\\temp\\")+dstFileName; dstFile.Open(dstFileName,CFile::modeWrite | CFile::modeCreate); SetDlgItemText(IDC_STATIC1,dstFileName); while(dwReadLen==(dwCount=srcFile.Read(dwbuf,dwReadLen))) { dstFile.Write(dwbuf,dwCount); dwFinish+=dwCount; dwFinishInFile+=dwCount; m_CAll.SetPos(dwFinish*100/llTotalLen); m_CFile.SetPos(dwFinishInFile*100/llFileLen); } dstFile.Write(dwbuf,dwCount); dstFile.Close(); srcFile.Close(); dwFinish+=dwCount; dwFinishInFile+=dwCount; m_CAll.SetPos(dwFinish*100/llTotalLen); m_CFile.SetPos(dwFinishInFile*100/llFileLen); } } AfxGetApp()->EndWaitCursor(); 求帮助,IE浏览器子页面句柄问题,百思不得其解。。。 请教:VC中位图充满主窗口的问题! CString 有这个操作吗? vc6.0中的unicode问题 请问DDK怎样设置呀? 求画出过三点一条弧线算法 求绘制矢量图形的源程序 写MFC用WindowsAPI打开COM16时为啥总是失败? 关于SOCKET服务端编程的问题求教,拜托!!! HELP!如何使用Keybd_event来自动输入汉字!! cpu=mmx166 32m 2G 跑NT4.0 or win2000 怎么样?? ====简单的语法问题,可我不知道???===
//m_CAll为整体进度条m_CFile为当前copy中的文件进度条(类型是:CProgressCtrl)
AfxGetApp()->BeginWaitCursor(); TCHAR lpFileName[MAX_PATH]=_T("D:\\*.*");
WIN32_FIND_DATA FindFileData; // data buffer
HANDLE hFirst=FindFirstFile(lpFileName,&FindFileData);
LONGLONG llTotalLen=0;
while(::FindNextFile(hFirst,&FindFileData))
{
llTotalLen+=(FindFileData.nFileSizeHigh * ((LONGLONG)MAXDWORD+1)) + FindFileData.nFileSizeLow;
} hFirst=FindFirstFile(lpFileName,&FindFileData);
DWORD dwbuf[0x00004000];
CFile srcFile,dstFile;
DWORD dwReadLen=sizeof(DWORD)*0x0004000,
dwCount,dwFinish=0;
while(::FindNextFile(hFirst,&FindFileData))
{
if(!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
CString srcFileName("D:\\");
srcFileName+=FindFileData.cFileName;
DWORD dwFinishInFile=0;
LONGLONG llFileLen=(FindFileData.nFileSizeHigh * ((LONGLONG)MAXDWORD+1)) + FindFileData.nFileSizeLow;
srcFile.Open(srcFileName,CFile::modeRead);
CString dstFileName(FindFileData.cFileName);
dstFileName=_T("D:\\temp\\")+dstFileName;
dstFile.Open(dstFileName,CFile::modeWrite | CFile::modeCreate); SetDlgItemText(IDC_STATIC1,dstFileName);
while(dwReadLen==(dwCount=srcFile.Read(dwbuf,dwReadLen)))
{
dstFile.Write(dwbuf,dwCount);
dwFinish+=dwCount;
dwFinishInFile+=dwCount;
m_CAll.SetPos(dwFinish*100/llTotalLen);
m_CFile.SetPos(dwFinishInFile*100/llFileLen);
}
dstFile.Write(dwbuf,dwCount);
dstFile.Close();
srcFile.Close();
dwFinish+=dwCount;
dwFinishInFile+=dwCount;
m_CAll.SetPos(dwFinish*100/llTotalLen);
m_CFile.SetPos(dwFinishInFile*100/llFileLen);
}
} AfxGetApp()->EndWaitCursor();