C++如何遍历一个目录下的所有文件_C++ 目录文件遍历方法

C++中遍历目录推荐使用C++17的,如for (const auto& entry : fs::directory_iterator(path)),可判断is_regular_file()过滤文件,支持递归遍历;Windows可用FindFirstFile/FindNextFile,Linux/Unix用opendir/readdir,跨平台可封装或使用Boost.Filesystem。

c++如何遍历一个目录下的所有文件_c++ 目录文件遍历方法

在C++中遍历目录下的所有文件,有多种实现方式,具体取决于操作系统和使用的标准库或第三方库。以下是几种常用且实用的方法。

使用 (C++17 及以上)

从 C++17 开始,标准库引入了 ,提供了跨平台的文件系统操作接口,推荐优先使用。

示例代码:

#include #include 

namespace fs = std::filesystem;

立即学习C++免费学习笔记(深入)”;

void listFiles(const std::string& path) {for (const auto& entry : fs::directory_iterator(path)) {std::cout << entry.path() << "n";}}

如果只想列出文件(排除子目录),可以加判断:

if (entry.is_regular_file()) {    std::cout << entry.path().filename() << "n";}

支持递归遍历:

for (const auto& entry : fs::recursive_directory_iterator(path)) {    // 处理每个条目}

Windows 平台:使用 Win32 API

在 Windows 上,可以使用 FindFirstFileFindNextFile 函数。

#include #include 

void listFilesWin32(const std::string& dir) {WIN32_FIND_DATA data;HANDLE hFind = FindFirstFile((dir + "*").c_str(), &data);

if (hFind == INVALID_HANDLE_VALUE) return;do {    if (data.cFileName[0] != '.') {  // 忽略 . 和 ..        std::cout << data.cFileName << "n";    }} while (FindNextFile(hFind, &data));FindClose(hFind);

}

该方法仅适用于 Windows,但性能良好且控制精细。

Linux/Unix:使用 dirent.h

在类 Unix 系统中,可使用 提供的函数进行目录遍历。

#include #include #include 

void listFilesUnix(const std::string& path) {DIR* dir = opendir(path.c_str());if (!dir) return;

struct dirent* entry;while ((entry = readdir(dir)) != nullptr) {    if (entry->d_name[0] != '.') {        std::cout <d_name << "n";    }}closedir(dir);

}

注意:不同系统的 d_type 支持可能不一致,若需判断是否为文件或目录,建议配合 stat() 使用。

跨平台兼容建议

若项目不能使用 C++17,又需要跨平台,可考虑以下方案:

封装 Win32 API 和 dirent.h,通过宏判断平台使用第三方库如 Boost.Filesystem(功能类似 std::filesystem,更早可用)优先升级编译器以支持 C++17 的

Boost 示例:

#include // 用法与 std::filesystem 基本一致

基本上就这些。现代 C++ 推荐使用 ,简洁安全,跨平台能力强。旧项目可根据平台选择原生 API 实现。关键是处理好隐藏文件(.开头)和递归需求。

以上就是C++如何遍历一个目录下的所有文件_C++ 目录文件遍历方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1478181.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 02:42:06
下一篇 2025年12月19日 02:42:12

相关推荐

发表回复

登录后才能评论
关注微信