C++11 跨平台文件模糊搜索工具 — 设计与实现详解
C++11 跨平台文件模糊搜索工具 — 设计与实现详解
一、项目概述
一个基于 C++11 的跨平台文件模糊搜索工具,支持按文件名子串匹配递归搜索目录。代码仅4 个文件、约 140 行,涵盖接口分离、递归遍历、跨平台适配、大小写敏感等完整设计。
项目结构
file_searcher/ ├── CMakeLists.txt # C++11 构建配置 ├── isearcher.h # 纯虚接口类 ├── searcher.h # 接口实现声明 ├── searcher.cpp # 核心实现(跨平台目录遍历 + 模糊匹配) └── main.cpp # CLI 入口二、核心设计:接口分离(isearcher.h)
structSearchResult{std::string path;// 文件完整路径std::string fileName;// 纯文件名(不含目录)};classISearcher{public:virtual~ISearcher()=default;virtualvoidsetCaseSensitive(boolcs)=0;virtualstd::vector<SearchResult>search(conststd::string&keyword)const=0;};原理:面向接口编程
- 纯虚函数
= 0使ISearcher成为抽象类,无法直接实例化,强制子类实现 - 虚析构函数
virtual ~ISearcher() = default;— 基类析构函数必须为虚,否则通过基类指针删除派生类对象时行为未定义 - 开闭原则— 新增搜索实现(如数据库搜索、全文索引搜索)只需继承
ISearcher,不修改已有代码
// main.cpp — 面向接口使用std::unique_ptr<ISearcher>searcher(newFileSearcher(root));searcher->search(keyword);std::unique_ptr<ISearcher>基类指针 +FileSearcher派生类对象 = 运行时多态。将来替换实现只需改new的类型,调用代码零改动。
三、目录遍历:跨平台方案(searcher.cpp:24-64)
#ifdef_WIN32WIN32_FIND_DATAA ffd;HANDLE hFind=FindFirstFileA((dir+"*").c_str(),&ffd)