VC++ 获取文件夹大小

由于进度条设置进度需求,需要获取文件夹大小,于是写了个获取文件夹大小的方法:

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

 

转载于:https://www.cnblogs.com/JczmDeveloper/archive/2013/04/20/3032799.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值