#include <iostream>
#include<filesystem>
void file_push(const std::filesystem::directory_entry& str)
{
if (str.status().type() == std::filesystem::file_type::directory) //如果它是一个目录,遍历目录
{
std::filesystem::directory_iterator list(str);
for (auto& it : list)
{ //auto -> const std::filesystem::directory_entry
//if (it.status().type() == std::filesystem::file_type::directory) //如果它是目录,递归遍历
//{
//std::cout << "目录 " << it.path().filename() << '\n';
file_push(it);
//}
//else//不是目录
//{
//std::cout << "文件 " << it.path().filename() << '\n';
//}
}
}
else //不是目录
{
std::cout << "文件 " << str.path().filename() << '\n';//文件名
const std::string str1 = str.path().filename().string();
std::cout << std::filesystem::absolute(str.path()) << '\n';//绝对路径
std::cout << std::filesystem::absolute(str.path()).string() << '\n';
}
}
int main()
{
std::filesystem::path str("C:\\Users\\Robin\\Desktop\\机器学习");
if (!std::filesystem::exists(str)) //判断路径是否存在.
{
std::cout << "路径错误\n";
return 1;
}
const std::filesystem::directory_entry entry(str); //文件入口
file_push(entry);
//if (entry.status().type() == file_type::directory) //这里用了C++11的强枚举类型
// cout << "该路径是一个目录" << endl;
//directory_iterator list(str); //文件入口容器
//for (auto& it : list)
// cout << it.path().filename() << endl; //通过文件入口(it)获取path对象,再得到path对象的文件名,将之输出
getchar();
return 0;
}
本代码是在vs2017设置c++17就可以运行
linux中要把目录路径改一下,gcc main.cpp -std=c++17 -lstdc++fs
建议装gcc8.0以上版本,因为有的版本只是部分支持