从recursive_directory_iterator中获取字符串

时间:2019-02-08 12:31:45

标签: c++ c++17

我正在尝试使用C ++ 17的<experimental/filesystem>从目录中提取所有文件名,并用它们填充vector<string>

我知道如何像这样打印它们:

void ShaderManager::LoadFilenames(std::string path)
{
    for (auto& p : fs::recursive_directory_iterator(path))
    {
        std::cout << p << '\n';
    }
}

但是,如果我尝试在for循环内使用m_ShaderFileNames.push_back(p.path().filename);,则会得到'std :: experimental :: filesystem :: v1 :: path :: filename':非标准语法;使用“&” 。但是,如果我尝试这样做,则会对绑定的成员函数表达式进行非法操作

编辑:我也尝试过m_ShaderFileNames.push_back(p.path().filename()),但是抛出了一个错误:没有重载函数“ std :: vector <_Ty,_Alloc> :: push_back [ _Ty = std :: string,_Alloc = std :: allocator]“与参数列表匹配

可能有一个非常简单的解决方案,但我似乎找不到它!

1 个答案:

答案 0 :(得分:1)

尝试:

m_ShaderFileNames.push_back(p.path().filename().string());

如果precursive_directory_iterator,则path()返回filesystem::path,因此它具有方法filename,该方法返回路径的文件名部分。然后,您可以调用string方法以字符串形式获取路径。