基于Zstandard qt 开发一款压缩也解压缩

基于 Zstandard(zstd)+ Qt/C++ 开发一款压缩解压软件,是一个非常适合个人开发者做的项目。它的难度比实现 7-Zip 低很多,但商业价值很高。

整体架构可以设计成类似 WinRAR / 7-Zip / PeaZip


一、软件架构设计

ZstdZip
│
├── UI层(Qt)
│   │
│   ├── 主窗口
│   ├── 文件浏览器
│   ├── 压缩进度
│   ├── 解压列表
│   └── 设置
│
├── Core核心(C++)
│   │
│   ├── Compressor
│   │      zstd压缩
│   │
│   ├── Decompressor
│   │      zstd解压
│   │
│   ├── Archive
│   │      文件打包
│   │
│   ├── Crypto
│   │      AES加密
│   │
│   └── ThreadPool
│          多线程
│
└── Format
    |
    └── .zpk

二、为什么不能直接压缩文件?

zstd本身:

test.txt

 ↓

test.zst

只能压缩一个数据流

例如:

hello.txt
image.png
main.cpp

不能直接:

xxx.zst

保存多个文件。

所以需要增加:

文件归档层

类似:

.tar.gz

结构:

文件
 |
 v
Tar打包
 |
 v
Zstd压缩
 |
 v
xxx.tar.zst

你的软件:

目录
 |
 Archive
 |
 Zstd
 |
 xxx.zpk

三、推荐自定义格式

例如:

.zpk

格式:

+----------------+
| Header         |
+----------------+
| 文件数量       |
+----------------+
| 文件信息       |
| name           |
| size           |
| offset         |
+----------------+
| ZSTD Data      |
+----------------+

类似:

7z格式

四、使用Zstd库

源码:

https://github.com/facebook/zstd

目录:

zstd
 |
 +-- lib
      |
      +-- zstd.h
      +-- common
      +-- compress
      +-- decompress

核心API:

压缩:

size_t ZSTD_compress(
 void* dst,
 size_t dstCapacity,
 const void* src,
 size_t srcSize,
 int compressionLevel
);

解压:

size_t ZSTD_decompress(
 void* dst,
 size_t dstCapacity,
 const void* compressed,
 size_t compressedSize
);

五、Qt界面设计

类似7-Zip:

+--------------------------------+

 文件    操作    工具    设置

+--------------------------------+

 📁 test.txt
 📁 image.png
 📁 project

+--------------------------------+

[添加] [压缩] [解压]

进度:
██████████ 80%

+--------------------------------+

Qt组件:

功能Qt组件
文件列表QTreeView
路径QFileSystemModel
进度QProgressBar
线程QThreadPool
任务QRunnable
设置QSettings

六、多线程压缩

zstd支持:

ZSTD_c_nbWorkers

开启线程:

ZSTD_CCtx_setParameter(
 ctx,
 ZSTD_c_nbWorkers,
 8
);

例如:

CPU:

8核心

↓

8线程压缩

七、项目目录

推荐:

ZstdZip

src
 |
 +-- main.cpp
 |
 +-- ui
 |    |
 |    +-- MainWindow.cpp
 |
 +-- core
 |    |
 |    +-- Compressor.cpp
 |    +-- Decompressor.cpp
 |    +-- Archive.cpp
 |
 +-- zstd
 |
 +-- crypto
 |
 +-- thread

include

resources

八、开发阶段规划

第一版(1个月)

功能:

✅ 压缩单文件

a.txt

↓

a.zst

✅ 解压


第二版(2个月)

增加:

✅ 多文件

project

↓

project.zpk

✅ 文件浏览


第三版(3个月)

增加:

✅ AES加密

.zpk
 |
 + AES-256

✅ 密码保护


第四版(半年)

商业版本:

ZstdZip Pro

+
云同步

+
分卷

+
右键菜单

+
自动备份

+
企业版

九、商业化可能

类似:

软件模式
WinRAR授权
Bandizip免费+商业
7-Zip免费
PeaZip免费

你的差异化:

Qt跨平台
+
Zstd高速
+
AI智能压缩
+
企业备份

可以定位:

  • 企业文件归档
  • 大数据压缩
  • 工程项目备份
  • 游戏资源打包

十、学习路线(Qt/C++方向)

推荐:

Qt文件管理
      |
      ↓
C++文件IO
      |
      ↓
zstd API
      |
      ↓
线程池
      |
      ↓
自定义文件格式
      |
      ↓
AES加密
      |
      ↓
商业压缩软件

如果你之前研究 Qt进销存、LLaMA、C++大型项目架构,这个项目难度非常匹配:
3~6个月可以做出一个接近7-Zip体验的国产Zstd压缩软件。

类似文章