我正在尝试使用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]“与参数列表匹配
可能有一个非常简单的解决方案,但我似乎找不到它!
答案 0 :(得分:1)
尝试:
m_ShaderFileNames.push_back(p.path().filename().string());
如果p
为recursive_directory_iterator
,则path()
返回filesystem::path
,因此它具有方法filename
,该方法返回路径的文件名部分。然后,您可以调用string
方法以字符串形式获取路径。