因此,我可以打印文件夹中的所有文件,但我想打印所需的文件。我的意思是,如果我在文件夹中输入例如Mineract,例如minecraft_server,mineract launcher,则将输入该名称。它将在名称中打印所有带有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;
}
}
答案 0 :(得分:2)
如果我正确理解了我严重怀疑的问题,则希望遍历文件夹及其子文件夹,并且仅对包含特定字符串的文件执行某些操作。
以下(在我头顶上)会起作用
qDebug() << "created" << (qintptr)menu;
connect(menu, &QMenu::destroyed,
this, [menu]() { qDebug() << "deleted" << (qintptr)menu; });
该示例直接来自我连续使用了8周的代码,但对我而言从未失败:
#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
}
减去库的完整代码可在github上找到:https://github.com/erikknaake/IseProjectSQLFileCombiner/blob/master/SQLFileCombiner.cpp
当您知道文件夹的名称时:
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);
}
也许您需要加一个/