获取文件夹尺寸

#include <iostream>
#include <windows.h>
#include <string>

// 函数名:获取文件夹尺寸
// 返回类型:ULONGLONG
// 参数:
//   folderPath - 文件夹路径
//   includeSubfolders - 是否包括所有子文件夹
// 描述:获取指定文件夹及其所有子文件夹中的文件尺寸总和。
ULONGLONG 获取文件夹尺寸(const std::wstring& folderPath, bool includeSubfolders) {
    ULONGLONG totalSize = 0;

    // 构建文件夹路径
    std::wstring searchPath = folderPath + L"\\*.*";

    WIN32_FIND_DATA findFileData;
    HANDLE hFind = FindFirstFile(searchPath.c_str(), &findFileData);

    if (hFind != INVALID_HANDLE_VALUE) {
        do {
            const std::wstring fileName = findFileData.cFileName;
            const std::wstring filePath = folderPath + L"\\" + fileName;

            if (fileName != L"." && fileName != L"..") {
                if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
                    if (includeSubfolders) {
                        // 如果是子文件夹且包括子文件夹,则递归计算子文件夹的尺寸
                        ULONGLONG subfolderSize = 获取文件夹尺寸(filePath, includeSubfolders);
                        totalSize += subfolderSize;
                    }
                }
                else {
                    // 如果是文件,则累加文件大小
                    ULONGLONG fileSize = static_cast<ULONGLONG>(findFileData.nFileSizeHigh) << 32 | findFileData.nFileSizeLow;
                    totalSize += fileSize;
                }
            }
        } while (FindNextFile(hFind, &findFileData) != 0);

        FindClose(hFind);
    }

    return totalSize;
}


int main() {
    std::locale::global(std::locale("")); // Set the global locale to support wide characters 
    std::wstring folderPath = L"Z:\\"; // 请替换为您要检查的文件夹路径
    ULONGLONG folderSize = 获取文件夹尺寸(folderPath, true);

    std::wcout << L"文件夹尺寸(字节): " << folderSize << std::endl;

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值