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

                }

            }

        }

    }

    

}

 

你可能感兴趣的:(vc++)