您的位置:首页 > 编程语言 > C语言/C++

VC++ 获取文件夹大小

2013-04-20 16:48 281 查看
由于进度条设置进度需求,需要获取文件夹大小,于是写了个获取文件夹大小的方法:

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);//递归调用
}
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: