函数来搜索目录中的文件名
C++ .find() function to search for file names in directory
我正在尝试开发一个小型搜索引擎应用程序,通过键入本地文件的名称作为输入来搜索C://目录中的本地文件。
我收到这个建议是为了实现搜索功能。然而,它只允许我使用文件的确切名称进行搜索,例如"1234_0506AB.pdf">
我希望我的搜索功能以"1234"作为输入,并且仍然能够获取"1234_0506AB.pdf"。
另一个建议是:不要简单地通过dir_entry.path().filename() == file_name
测试相等性,只需将文件名作为字符串dir_entry.path().filename().string()
并执行.find()
即可。对于更通用的搜索,您可以使用regex并将其与文件名匹配。
我在这方面的经验很少,需要一些帮助和指导才能在代码中使用.find((或regex。
#include <filesystem>
#include <algorithm>
namespace fs = std::filesystem;
void search(const fs::path& directory, const fs::path& file_name)
{
auto d = fs::directory_iterator(directory);
auto found = std::find_if(d, end(d), [&file_name](const auto& dir_entry)
{
return dir_entry.path().filename() == file_name;
});
if (found != end(d))
{
// we have found what we were looking for
}
// ...
}
要使用find,您应该查看该方法的文档,其中还包含大多数网站上的一些示例。
在您的代码中,如果文件名与您要查找的文件名完全相同,则接受该文件名:
return dir_entry.path().filename() == file_name;
要接受子字符串匹配,您必须修改此检查以使用find
而不是==
。如链接文档中所述,如果find
找不到匹配项,则返回npos
。
return dir_entry.path().filename().string().find(file_name.string()) != std::string::npos;
如果只在字符串的开头查找匹配项,则可以使用== 0
而不是!= npos
。
但在这种情况下,您也有其他选择,例如使用substr将文件名剪切为所需长度:
return dir_entry.path().filename().string().substr(0, file_name.size()) == file_name.string();
有关使用正则表达式的解决方案,请查看同一网站上的正则表达式示例。
相关文章:
- 从命令行c++发送文本文件名
- 有根的二进制搜索树.保留与其父级的链接
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 在C++中搜索嵌套多映射值
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 二进制搜索树叶数问题
- 为什么二进制搜索在我的测试中不起作用
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 正在尝试重载二进制搜索树分配运算符
- c++binary_search函数排序数组(流行名称搜索)出现问题
- 向量上的线性搜索
- 如何在动态数组上使用搜索函数
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- 当Microsoft文档仅包含 C# 示例时,如何查找 C++ 包含文件名
- cmake:添加要搜索头文件的目录
- 函数来搜索目录中的文件名
- C++搜索文件名指针指向字符串 strcmp 错误
- 使用find_last_of搜索文件名
- 按文件名搜索文件
- 是否有不搜索短文件名的Windows FindFirstFile/FindNextFile API的替代方法?