c++如何获取当前目录的所有子目录名并存入vector容器【实战】

浅强大大_2441

浅强大大_2441

2026-03-29

691人浏览

原创

使用 std::filesystem::directory_iterator 遍历当前目录的一级子目录最简洁可靠,C++17 起标准支持,自动跳过 . 和 ..,需显式调用 is_directory() 判断,无需递归且轻量高效。

c++如何获取当前目录的所有子目录名并存入vector容器【实战】

用 std::filesystem::directory_iterator 遍历当前目录的子目录

直接用 std::filesystem 是最简洁可靠的方式,C++17 起标准支持,不用依赖 Boost 或系统 API。它会自动跳过 . 和 ..,也天然区分文件和目录。

关键点:必须显式检查每个 entry 是否为目录,不能只靠名字判断;迭代器默认不递归,正合你“只取一级子目录”的需求。

  • 确保编译器开启 C++17(如 g++ 加 -std=c++17)
  • 链接时若报 undefined reference,Windows MSVC 一般没问题,GCC/Clang 可能需加 -lstdc++fs
  • std::filesystem::current_path() 返回的是绝对路径,但 directory_iterator 接收相对路径(如 ".")也完全合法
#include <filesystem>
#include <vector>
#include <string>

std::vector<:string> getSubdirs() {
    std::vector<:string> result;
    for (const auto& entry : std::filesystem::directory_iterator(".")) {
        if (entry.is_directory()) {
            result.push_back(entry.path().filename().string());
        }
    }
    return result;
}</:string></:string></string></vector></filesystem>

为什么不用 std::filesystem::recursive_directory_iterator

它会钻进所有嵌套子目录,一层层往下走,结果里混着孙子、曾孙级目录,不符合“当前目录的子目录”这个限定。除非你手动记录深度并提前 break,但那就绕远了,还容易出错。

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
  • 如果你真需要限制深度,得自己维护一个计数器,每次 entry.depth() > 1 就跳过 —— 但 directory_iterator 更轻量、更直白
  • recursive_directory_iterator 构造开销略大,尤其目录树深时,没必要

Windows 下路径分隔符和编码坑

返回的 entry.path().filename().string() 在 Windows 上是 UTF-8 编码(MSVC 默认),但控制台可能用 GBK 显示乱码;Linux/macOS 一般无感。

  • 如果后续要拼路径(比如打开子目录里的文件),建议保留 std::filesystem::path 类型,别急着转 std::string —— 它能正确处理 / 和 \
  • 避免用 c_str() 直接传给旧 C API(如 opendir()),跨平台时易挂
  • 若必须输出中文名到控制台,Windows 上可临时调用 SetConsoleOutputCP(CP_UTF8)(仅限 cmd/powershell)

替代方案:opendir/readdir 的兼容性代价

纯 C 方式()在 Linux/macOS 上没问题,但 Windows 不原生支持,得额外引入兼容层(如 mingw 的实现或自己封装)。而且它不区分文件/目录类型,得再调 stat() 判断,代码更啰嗦、错误分支更多。

  • 除非项目强制要求 C++11 或更低标准,否则没理由退回去
  • readdir 返回的 d_name 是裸 char*,没 RAII,忘了 closedir 就泄漏句柄
  • 跨平台构建时,dirent.h 头文件位置、函数签名可能不一致,CI 容易翻车

实际用的时候,最常被忽略的是编译选项和链接库——写完代码一编译就报 undefined reference to std::filesystem::...,不是代码错,是漏了 -lstdc++fs 或没设 C++17。

C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c++

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.02

7499

3

java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

2025.10.15

3320

7

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

2025.10.24

867

6

undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

2023.07.31

12385

4

网页undefined是什么意思
网页undefined是什么意思

网页undefined是指页面出现了未知错误的意思,提示undefined一般是在开发网站的时候定义不正确或是转换不正确,或是找不到定义才会提示undefined未定义这个错误。想了解更多的相关内容,可以阅读本专题下面的文章。

2024.08.14

5547

7

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

2025.12.25

2516

7

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.26

3479

3

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.27

3038

6

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

2023.08.01

1548

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习