由于进度条设置进度需求,需要获取文件夹大小,于是写了个获取文件夹大小的方法:
DWORD m_dwFolderSize;//文件夹大小
void GetFolderSize(char* strFolderPath,DWORD &m_dwFolderSize);//strFolderPath 是文件夹路径
//================获取文件夹大小========================================= void CClearTmpFileDlg::GetFolderSize(char* strFolderPath,DWORD &m_dwFolderSize) { char path[MAX_PATH]={0}; strcpy(path,strFolderPath); if(path[strlen(path)-1]!='\\')//将目录以“\\*.*”形式结尾 { strcat(path,"\\*.*");//连接字符串 } else { strcat(path,"*.*");//连接字符串 } WIN32_FIND_DATA findData;//定义一个文件查找数据结构 memset(&findData,0,sizeof(WIN32_FIND_DATA)); HANDLE hFind = FindFirstFile(path,&findData);//开始查找文件 if(hFind != INVALID_HANDLE_VALUE)//文件查找成功 { while(FindNextFile(hFind,&findData)==TRUE)//查找下一个文件 { //如果文件不是一个目录 if(!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { DWORD dwFileSize = (findData.nFileSizeHigh* (MAXDWORD+1) + findData.nFileSizeLow)/(1024);//获取文件大小,单位为KB m_dwFolderSize += dwFileSize;//累计已扫描文件的容量大小,单位为KB } else//如果文件是一个目录,则递归遍历该目录 { if((strcmp((const char *)&findData.cFileName,"...")!=0) && (strcmp((const char *)&findData.cFileName,"..")!=0)&& (strcmp((const char *)&findData.cFileName,".")!=0)) { char szFileName[MAX_PATH]={0}; strcpy(szFileName,path);//获取完整文件名 if(szFileName[strlen(szFileName)-1]!='\\') { strcat(szFileName,"\\"); } strcat(szFileName,(char *)findData.cFileName); GetFolderSize(szFileName,m_dwFolderSize);//递归调用 } } } } }