You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++如何获取C盘根目录所有文件路径?现有代码输出异常如何解决

问题原因
  • 路径格式错误:Windows系统下C:和C:\是完全不同的路径含义,前者指代C盘对应的当前工作目录(也就是你程序运行的目录),后者才是C盘根目录。你调用szSingleDrive[strlen(szSingleDrive) - 1] = 0;把GetLogicalDriveStrings返回的自带末尾反斜杠删掉了,传入遍历的路径变成了C:,自然只会输出当前程序所在目录的文件。
  • 指针偏移代码位置错误:szSingleDrive += strlen(szSingleDrive) + 1;这行代码写在了目录遍历的for循环内部,第一个文件遍历完成后就会直接偏移驱动器指针,导致外层驱动器循环直接终止,无法完成全目录遍历。
  • 缺少异常处理:C盘根目录存在大量无权限访问的系统目录,recursive_directory_iterator默认遇到访问拒绝会直接抛出异常,导致程序提前退出,无法遍历完整路径。
修复方案

修复后的完整代码如下:

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

namespace fs = std::filesystem;

int main()
{
    DWORD dwSize = MAX_PATH;
    char szLogicalDrives[MAX_PATH] = { 0 };
    DWORD dwResult = GetLogicalDriveStringsA(dwSize, szLogicalDrives);

    if (dwResult > 0 && dwResult <= MAX_PATH)
    {
        char* szSingleDrive = szLogicalDrives;
        while (*szSingleDrive)
        {
            // 保留驱动器末尾的反斜杠,确保是根目录路径
            printf("当前遍历驱动器:%s\n", szSingleDrive);
            
            // 配置遍历选项,自动跳过无权限目录
            auto iter_options = fs::directory_options::skip_permission_denied;
            try
            {
                for (const auto& p : fs::recursive_directory_iterator(szSingleDrive, iter_options))
                {
                    if (fs::is_regular_file(p.path()))
                    {
                        std::cout << p.path().string() << std::endl;
                    }
                }
            }
            catch (const fs::filesystem_error& e)
            {
                std::cerr << "遍历出错:" << e.what() << std::endl;
            }
            
            // 指针偏移移到外层循环末尾,处理完当前驱动器再切换下一个
            szSingleDrive += strlen(szSingleDrive) + 1;
        }
    }
    return 0;
}

核心修复点:

  • 移除了删除驱动器路径末尾反斜杠的代码,确保传入路径为盘符根目录
  • 调整驱动器指针偏移代码的位置到外层循环末尾,保证单个驱动器遍历完成后再切换下一个
  • 新增权限跳过配置和异常捕获逻辑,避免程序因访问受限提前终止

内容的提问来源于stack exchange,提问作者Sad1que

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:39:03