处理目录块边界、GUI 、UTF-8 路径、策略模式、单文件发布等问题。
2026 年 3 月 2 日到 2026 年 3 月 15 日:CLI 稳定化
CLI debug、refactor。FlagType 改成强类型枚举,目录接口、工具类接口、文件已存在时的处理方式、目录队列逻辑同步整理。目录标准、文件标准、分割标准共享同一组枚举和偏移量规则,目录恢复与数据区读取都按统一类型解释。
enum class FlagType : char{ Directory = '0', File = '1', Separated = '2', LogicalRoot = '3', SymbolLink = '4'};目录块边界写入问题。目录条目恰好落在分块边界时,流程没有正常进行,产生空分块或目录解析错位,具体问题在于请求的流程逻辑的遗漏。
关于长路径问题。尝试在PathTransfer::transPath() 给绝对路径加上 \\?\ 前缀,用于解决 Windows 路径长度限制。由于操作系统实际上还是禁止了长路径的出现,项目只能使用 Windows 路径处理和 UTF-8 中文路径。
2026 年 4 月 1 日:构建系统调整
构建系统改为 MSVC + CMake。关闭CMAKE_INTERPROCEDURAL_OPTIMIZATION 。
仅仅是为了使用VS的性能分析报告
2026 年 4 月 12 日到 2026 年 4 月 15 日:文档整理与 GUI 工程建立
代码清理与 GUI 开发。开始编写 Qt Widgets 。编写CMake 配置和后台任务执行框架。
GUI 的设计隔离: Y_Manager 和 CompressorFileSystem负责主逻辑。GUI 负责参数录入、结果展示和线程调度。
修复directoryOffset 的写入时机问题。
2026 年 4 月 16 日:Qt GUI 主体
GUI 主体围绕 MainWindow、CompressionWorker、QThread 组织。MainWindow 收集源路径、输出目录、模式和密码。CompressionWorker 在后台线程调用 MainLoop、CompressionLoop、DecompressionLoop。进度通过信号送回 UI 线程。界面层不直接访问目录块、数据区和压缩模块。
MainWindow (UI线程) -> QThread -> CompressionWorker -> CompressionLoop / DecompressionLoop <- detailedProgress / finishedGUI 接入后,进度信号频率需要限流。后台线程若每处理一小段数据就发出信号,UI 线程会堆积刷新请求。处理方式分成两层:MainLoop 控制核心层回调频率,CompressionWorker 按时间和百分比变化量再做一层节流。双层节流下,进度显示保持连续。
窗口关闭期间的线程退出。后台线程执行中直接关闭窗口,文件句柄、缓冲区和输出状态容易残留。GUI 因此加入 std::atomic<bool> m_stopRequested。主线程发出停止请求,后台线程在进度回调和循环中检查标记,析构阶段等待线程退出。停止逻辑只处理线程与资源,不改协议结构。
文件句柄和缓冲区释放。BinaryStandardLoader::setAllLoopDone()、DecompressionLoop::createFile()、std::vector 缓冲复用、Heffman::merge_ttabs() 的容量释放都进入正式代码。长任务运行期间,已经处理完的缓冲区会及时释放。解压阶段输出文件句柄也会在写入结束后关闭。
中文路径与编码处理
GUI 接入后的路径编码差异。Qt 层传入 UTF-8 字符串,std::filesystem 在 Windows 下返回的路径文本可能关联本地代码页。路径拼接、文件名恢复和日志显示都依赖统一转换规则,中文输出目录尤其敏感。
修正规则集中在 EncodingUtils。Qt 边界处统一使用 UTF-8 作为文本协议,QString 进入核心层前先转 UTF-8,进入文件系统前再用 pathFromUtf8(),从 std::filesystem::path 回到日志或 GUI 时再用 pathToUtf8()。目录遍历和文件名序列化统一使用 entry.path().filename().u8string()。toStdString()。关于输出目录乱码:UTF-8 文本先转路径对象,再交给 DecompressionLoop。
统一规则覆盖中文路径、中文输出目录、日志显示和 GUI 展示。 EncodingUtils ,QString、std::string、std::filesystem::path 统一处理三个文本体系的路径逻辑。
Qt 工具链与系统兼容性
GUI 发布的依赖为 Qt 6.2.4 LTS。MSYS2 MinGW 15.x 构建版本在运行时出现过 nanosleep64 缺失,Qt 6.10.1 的部分 API 在旧版 Windows 10 环境下也不稳定。Qt 6.2.4 LTS 用于统一图形界面、路径转换、线程模型和静态发布环境。
GUI 兼容 Windows 10 1809 及以上版本。
2026 年 4 月 17 日:多策略支持与发布形态调整
主流程原本把 Huffman + AES 写死在内部。重构后,CompressionMode 枚举、StrategyFactory、ICompression、IEncryption、NullCompression、NullEncryption 一并接入,压缩和加密组合改由运行时装配。
enum class CompressionMode : uint8_t{ HuffmanAES = 0, HuffmanOnly = 1, AESOnly = 2, PackOnly = 3};CompressionLoop、DecompressionLoop 和 BinaryStandardLoader 由依赖具体类改为依赖接口。HeaderWriter 负责把策略号写入文件头,解压侧通过 Header.strategy 还原模式。策略号 0 继续映射 HuffmanAES,旧归档文件保持兼容。
发布形态同步调整。动态部署包体约 57MB,Qt DLL、渲染依赖和资源文件分散在目录中。静态发布改用 Qt 6.2.4 静态库,构建开关通过 USE_STATIC_QT 控制,翻译文件和图片资源内嵌进可执行文件,背景图从 PNG 改成 JPEG。默认发布体积约 16MB,发布目录不携带额外依赖。
2026 年 4 月 18 日到 2026 年 4 月 19 日:编码整理、翻译与工程清理
编码规则固定为:GUI 输入统一转 UTF-8,核心层字符串按 UTF-8 组织,真正接触文件系统时再转成 std::filesystem::path。规则覆盖 GUI 压缩输入、解压输出目录、目录遍历结果和日志文本。编码转换职责全部归入 EncodingUtils。
GUI 多语言规则固定为:界面文案统一使用 tr() 包装,翻译资源通过 resources.qrc 内嵌,语言选择优先读取 SFC_GUI_LANGUAGE,没有显式指定时再读取 QLocale::system()。单 exe 发布下,翻译资源不依赖外部目录。日志和技术状态文本保持英文,控件文本按语言环境切换。
工程整理还包括头文件、命名空间、本地构建目录 .gitignore 和临时验证目录清理。目录块规则、编码规则、GUI 工具链和策略模式稳定后,代码布局与功能布局对齐。
结果
从CLI 到桌面程序(GUI)。处理的问题:目录块写入顺序、目录恢复队列、输出目录编码、目录偏移量回填和目录块加密、GUI、多策略和单文件发布。
部分信息可能已经过时
粤公网安备44011102484817号