C++ 搜索引擎核心模块:文件读取与分词工具类实现
在搜索引擎架构中,通用工具类的封装至关重要。这部分代码集中了文件操作与文本处理的核心逻辑,供项目其他模块调用。
1. FileUtil
该类负责从指定路径读取文件内容,并将结果追加到传入的字符串指针中。方法返回布尔值标识读取是否成功。若文件打开失败(如路径错误),将输出错误信息并返回 false。
文件以二进制输入模式打开,读取过程中不会修改原文件内容。
class FileUtil {
public:
static bool ReadFile(const std::string &file_path, std::string *out) {
// 定义 ifstream 对象关联特定文件,ios::binary 表示二进制模式
std::ifstream in(file_path, std::ios::in | std::ios::binary);
// 检查文件是否成功打开
if (!in.is_open()) {
std::cout << "open file " << file_path << ": error" << std::endl;
return false;
}
// getline 返回流引用,可隐式转换为 bool 判断状态
std::string line;
while (std::getline(in, line)) {
*out += line; // 逐行追加内容
}
in.close();
return true;
}
};
2. JiebaUtil
针对中文分词需求,我们封装了 cppjieba 库。通过静态成员管理实例生命周期,避免重复初始化带来的性能损耗。
为什么使用 static?
-
静态成员变量
jieba:cppjieba::Jieba对象的初始化依赖词典文件,成本较高。使用static修饰后,该对象成为类级别成员,整个程序运行期间仅初始化一次。这确保了所有调用处共享同一实例,既节省资源又保证词典数据的一致性。 -
静态成员函数
CutString: 由于jieba是静态成员,无需创建JiebaUtil实例即可访问。函数标记为static后,可通过类名直接调用,简化了接口使用。


