|
用于检测文件是否采用ZLIB压缩格式,通过检查文件头部的特定字节来判断
ZLIB压缩检测优化方案
原始代码分析
原始代码存在以下可优化点:
错误处理不完善(仅注释掉的cerr输出)
魔数(magic number)直接使用影响可读性
返回逻辑可以更简洁
缺少必要的注释说明
优化后的代码实现
/** * @brief 检测文件是否采用ZLIB压缩格式 * @param filePath 文件路径 * @return true-是ZLIB压缩格式,false-不是或文件无法打开 */ bool IsZlibCompressed(const CString& filePath) { // ZLIB压缩格式的常见头部标识 constexpr BYTE ZLIB_HEADER = 0x78; constexpr BYTE ZLIB_FLAG_DA = 0xDA; constexpr BYTE ZLIB_FLAG_9C = 0x9C; CFile file; if (!file.Open(filePath, CFile::modeRead | CFile::typeBinary)) { TRACE(_T("错误:无法打开文件 %s\n"), filePath.GetString()); return false; } BYTE header[2] = {0}; if (file.Read(header, sizeof(header)) != sizeof(header)) { file.Close(); TRACE(_T("错误:读取文件头失败 %s\n"), filePath.GetString()); return false; } file.Close(); // 检查是否符合ZLIB头部格式 return (header[0] == ZLIB_HEADER) && (header[1] == ZLIB_FLAG_DA || header[1] == ZLIB_FLAG_9C); }
优化说明
可读性增强:
使用命名常量替代魔数
添加完整的函数注释
错误处理完善:
使用TRACE替代cerr(更适合MFC环境)
增加读取长度的校验
逻辑优化:
将返回条件合并为单条表达式
提前关闭文件句柄
兼容性考虑:
保留原始支持的两种ZLIB格式(0x78DA和0x789C)
扩展建议
可考虑增加对其他压缩格式的检测
可以封装为C++工具类提供更多文件检测功能
在需要高性能的场景可改用内存映射文件方式
|
|