我有文件夹: C:\ Users \ Bob \ Desktop \ SomeFolder 。
在文件夹“SomeFolder”中,我们有10个文件:
abc.txt,abc1.txt,abc2.txt,abc3.txt,abc4.txt,
xyz.txt,xyz1.txt,xyz2.txt,xyz3.txt,xyz4.txt。
现在假设我要显示(列出)名称以“abc”开头的所有文件。
看起来应该是这样的:
std::string path = "path_to_directory"; //C:\Users\Bob\Desktop\SomeFolder
for (auto & p : fs::directory_iterator(path))
std::cout << p << std::endl;
但我需要某种“过滤器”。
答案 0 :(得分:2)
只需使用std::string::find
for(auto& p: fs::directory_iterator(tempPath))
{
std::string file_name = p.path().filename();
if ( file_name.find("abc") == 0 )
{
std::cout << file_name <<std::endl;
}
}
对于某些&#34;复杂的&#34;可以像std::regex
一样使用路径中的模式
std::regex fileMatcher( tempPath + "/abc.*",
// All files that begins with `abc` in current directory .
std::regex_constants::ECMAScript | std::regex_constants::icase);
for(auto& p: fs::directory_iterator(tempPath))
if (std::regex_match (p.path().c_str() ,fileMatcher ))
{
std::cout << p <<std::endl;
}
可能需要调整Windows Path。我没有最新的编译器来检查Windows
答案 1 :(得分:-4)
编辑代码:
for(auto & p : fs::directory_iterator(path)){
if (regex_match(p , regex("(abc)(.*)"))){
cout <<p<< endl;
}
}
return 0;
它打印以字符串“abc”
开头的文件名