所以我可以打印文件夹中的所有文件,但我想打印我想要的文件。我的意思是,我将输入例如Mineract,如果我在文件夹中,例如minecraft_server,mineract启动器。它会打印所有名称中包含Minecraft的名称,因此它将打印Minecraft服务器和Mineacraft Launcher
。我试过把它放在一个 for 循环中。但我不能做路径的我位置,这是不可能的。
for (const auto& entry : fs::directory_iterator(path))
{
cout << entry.path() << endl;
}
那只会打印所有文件。
更新的代码(仍然不起作用(。搜索 - 用户输入的内容
for (const auto& entry : fs::directory_iterator(path)) {
if (entry.path().string().find(search) != string::npos) {
cout << entry.path().string() << endl;
}
}
如果我正确理解了我严重怀疑的问题,您希望遍历文件夹及其子文件夹,并且只对包含某个字符串的文件执行某些操作。
以下(在我的头顶上(将起作用
#include <experimental/filestream>
namespace fs = std::experimental::filestream
for (auto& file : fs::recursive_directory_iterator(yourPath))
{
if(file.path().u8string().find(yourString) != std::string::npos)
do your stuff
}
这个例子直接来自我连续使用了 8 周的代码,它从未在我身上失败过:
for (auto file : fs::recursive_directory_iterator("./"))
{
//std::cout << file.path().u8string() << std::endl;
if (includedFiles.find(file.path().u8string()) != includedFiles.end()
|| skipFile(config, files, &file)
|| file.path().u8string().find((*config)["testFile"].get<std::string>()) != std::string::npos
|| file.path().u8string().find((*config)["outputFile"].get<std::string>()) != std::string::npos
|| matchRegex(&fileOrder, &file.path().u8string())) // Last one does ordering
{
//if (file.path().u8string().find("ValidateModel") != std::string::npos)
//{
// std::cout << "skipped model string " << file.path().u8string() << std::endl;
//}
continue;
}
includedFiles[file.path().u8string()] = true;
std::cout << file.path().u8string() << std::endl;
functor(file);
}
完整代码减去库可在 github 上找到:https://github.com/erikknaake/IseProjectSQLFileCombiner/blob/master/SQLFileCombiner.cpp
当您知道文件夹的名称时:
std::string path = std::cin;
for (auto& file : fs::recursive_directory_iterator(path))
{
do your stuff
}
也许您需要在前面加上一个/