vc统计文件夹大小(非递归)

本文介绍一种非递归方式获取文件夹大小的方法,通过使用堆栈保存路径,逐层遍历文件夹并累加文件大小,适用于需要计算大型目录的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做项目的遇到一个需要获取指定的文件夹大小的需求,网上找了一通似乎很多都是递归的,因为项目的需要文件夹大小可能很大,遂自己写了一个,感觉还行用起来。
使用堆栈来保存文件夹的路径。
堆栈只要不为空,那就从栈顶弹出一个文件夹路径。
对这个文件夹,进行搜寻,如果这个文件夹下有文件夹,那就将子文件夹路径压入栈顶,如果有文件,那就获取文件大小并累加到size中
直到堆栈为空代表都遍历完毕,返回size大小

ULONGLONG count_foldersize(WCHAR *path){
    stack<wstring> s;
    s.push(path);
    HANDLE hfile = NULL;
    WIN32_FIND_DATA pNextInfo;
    CFileStatus status;
    ULONGLONG size=0;
    while(!s.empty()){
        wstring stack_path = s.top();
        s.pop();
        wstring stack_path_complete = stack_path;
        stack_path_complete.append(L"\\*.*");
        hfile = FindFirstFile(stack_path_complete.c_str(), &pNextInfo);
        do
        {
            if(pNextInfo.dwFileAttributes  & FILE_ATTRIBUTE_DIRECTORY)
            {
                if(lstrcmp(pNextInfo.cFileName,L".") && lstrcmp(pNextInfo.cFileName, L".."))
                {
                    wstring stack_path_tmp = stack_path;
                    stack_path_tmp.append(L"\\").append(pNextInfo.cFileName);
                    s.push(stack_path_tmp);
                }
            }
            else
            {
                wstring stack_path_tmp = stack_path;
                stack_path_tmp.append(L"\\").append(pNextInfo.cFileName);
                CFile::GetStatus(stack_path_tmp.c_str(),status);
                size += status.m_size;
            }
        }while(FindNextFile(hfile, &pNextInfo));


    }
    return size;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值