首页 > 编程语言 >C++ 遍历目录

C++ 遍历目录

时间:2023-02-27 20:12:09浏览次数:36  
标签:std fs const auto C++ 遍历 directory path 目录


单层遍历目录(无递归):

#include <filesystem>

namespace fs = std::filesystem;

const fs::path pathToShow{ argc >= 2 ? argv[1] : fs::current_path() };

for (const auto& entry : fs::directory_iterator(pathToShow)) {
    const auto filenameStr = entry.path().filename().string();
    if (entry.is_directory()) {
        std::cout << "dir:  " << filenameStr << '\n';
    }
    else if (entry.is_regular_file()) {
        std::cout << "file: " << filenameStr << '\n';
    }
    else
        std::cout << "??    " << filenameStr << '\n';
}

 

递归遍历目录:

for(auto itEntry = fs::recursive_directory_iterator(pathToShow);
         itEntry != fs::recursive_directory_iterator(); 
         ++itEntry ) {
    const auto filenameStr = iterEntry->path().filename().string();
    std::cout << std::setw(iterEntry.depth()*3) << "";
    std::cout << "dir:  " << filenameStr << '\n';
}

可以使用 depth() 方法检查当前的递归层级,这将有助于创建一个带缩进的输出。

 

 

C++17 暴漏了一个 path 类型,可以很方便的获取路径的扩展名,仅仅使用 path::extension() 方法即可,举例如下:

std::filesystem::path("C:\\temp\\hello.txt").extension();

支持的编译器有

FeatureGCCClangMSVC
Filesystem 8.0 7.0 VS 2017 15.7

标签:std,fs,const,auto,C++,遍历,directory,path,目录
From: https://www.cnblogs.com/SunShineYPH/p/17161699.html

相关文章