# ZipTool **Repository Path**: jason1012/zip-tool ## Basic Information - **Project Name**: ZipTool - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-25 - **Last Updated**: 2026-07-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ZipTool 基于 **7-Zip** 的自用 Windows 压缩 / 解压工具,图形界面(WPF)+ 命令行调用 `7z.exe`。 零第三方运行时依赖,打包后可直接分发给其他电脑使用。 > 仓库根目录即解决方案根:`ZipTool.sln` + `ZipTool/` 工程目录。 --- ## ✨ 功能特性 - **压缩**:选文件 / 文件夹 → 压缩为 `.7z` 或 `.zip`,实时进度条 + 日志 + 可取消。 - **解压**:选压缩包 → 解压到指定目录,支持 `7z` / `zip` 等常见格式。 - **加密**: - `7z` 格式:`-p` 密码 + `-mhe=on` 同时加密文件名; - `zip` 格式:AES-256 加密。 - **内容预览 / 选择性解压**:解压前列出压缩包内文件树,可勾选只解压部分文件(默认全选)。 - **智能命名与防覆盖**: - 压缩产物默认与源同名;目标已存在时自动追加 `(1)`、`(2)`… 不覆盖; - 解压重复到同路径时,自动生成独立文件夹(`文件夹 (1)`),不混入旧内容; - 解压零散文件自动归置到与压缩包同名的文件夹。 - **分卷支持**:可直接打开别人发来的分卷包首卷(如 `xxx.7z.001`),自动定位后续分卷。 - **交互增强**:拖拽添加、原生「选择文件夹」对话框、源路径框支持粘贴、跟随系统深 / 浅色主题、深色控件模板。 - **中文支持**:7z 控制台以 UTF-8 通信,中文文件名 / 路径不乱码。 --- ## 🧱 技术栈 | 项目 | 说明 | | --- | --- | | 语言 / 框架 | C# / .NET 8 (WPF, Windows) | | 压缩内核 | 随包发布的 `7z.exe` + `7z.dll`(命令行调用,不重新实现算法) | | 打包 | Inno Setup(`Installer/ZipTool.iss`) | | 依赖 | 仅 .NET 8 + 7-Zip 命令行,无第三方 NuGet 运行时依赖 | --- ## 📁 目录结构 ``` . ├── ZipTool.sln # 解决方案 ├── ZipTool/ # WPF 主程序工程 │ ├── App.xaml / App.xaml.cs │ ├── MainWindow.xaml(.cs) # 压缩页 / 解压页 界面与逻辑 │ ├── Helpers/ │ │ ├── FolderBrowser.cs # P/Invoke 文件夹选择 │ │ └── ThemeHelper.cs # 系统主题跟随 │ ├── Services/ │ │ ├── ArchiveService.cs # 7z 进程封装(核心) │ │ └── ProgressParser.cs # 进度解析 │ ├── Themes/ │ │ ├── Light.xaml # 浅色主题画刷 │ │ └── Dark.xaml # 深色主题画刷 │ ├── Tools/ # 放置 7z.exe / 7z.dll(详见该目录 README) │ ├── Installer/ZipTool.iss # Inno Setup 安装脚本 │ └── ZipTool.csproj ├── dist/ # 已生成的安装包(见下方说明,不进仓库) └── README.md # 本文件 ``` --- ## 🛠 本地构建与运行 ### 前置条件 - Windows 10/11 x64 - [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) + Windows Desktop 工作负载: ```powershell dotnet workload install windows-desktop # 首次需要 ``` - 把 7-Zip 的 `7z.exe` 与 `7z.dll` 放到 `ZipTool/Tools/`(来自官网「7-Zip Extra」x64 包)。 详见 [`ZipTool/Tools/README.md`](ZipTool/Tools/README.md)。 ### 构建 / 运行 ```powershell cd ZipTool dotnet build -c Release dotnet run -c Release ``` 构建后 `7z.exe` / `7z.dll` 会被自动拷贝到输出目录,运行时直接从程序目录调用。 --- ## 📦 发布为自包含程序 无需目标机器安装 .NET 运行时: ```powershell cd ZipTool dotnet publish -c Release -r win-x64 --self-contained true ``` 产物位于 `ZipTool/bin/Release/net8.0-windows/win-x64/publish/`, 拷贝到任意 Windows x64 机器即可直接运行(目录内已自带 .NET 运行时与 `7z` 文件)。 --- ## 💿 打包成安装包 1. 先完成上面的 `dotnet publish`; 2. 用 **Inno Setup Compiler** 打开 `ZipTool/Installer/ZipTool.iss` 编译; 3. 生成 `ZipTool_Setup.exe`。 > 安装包会包含程序本体、.NET 运行时以及 `7z.exe` / `7z.dll`,安装后开箱即用。 ### 安装包在哪里? - 本仓库 **不把安装包提交进 Git**(二进制体积较大,且每次构建都会变化)。 - 已生成的安装包单独放在仓库根的 **`dist/ZipTool_Setup.exe`**,可直接取用 / 分发给他人。 - 发布到 GitHub / Gitee 时,建议把该文件作为 **Release 资产** 上传,而不是放进源码树。 --- ## ✅ 自测清单 - [ ] 含多层子目录的文件夹 → 压缩成 `.7z`,进度到 100%。 - [ ] 同一文件夹 → 压缩成 `.zip` 成功。 - [ ] 加密压缩(7z 勾选加密文件名 / zip AES)→ 无密码无法打开。 - [ ] 解压上述 `.7z` → 内容与源目录一致。 - [ ] 路径含空格 / 中文 → 压缩、解压、文件树显示均正常。 - [ ] 内容预览页勾选部分文件 → 仅解压勾选项;取消全部勾选 → 提示而非全解压。 - [ ] 同一压缩包重复解压到同路径 → 生成独立 `(1)` 文件夹,不混入旧内容。 - [ ] 中途点「取消」→ 进程被终止,无残留。 - [ ] 传入不存在的路径 → 友好报错,不崩溃。 --- ## 📌 备注 - **7-Zip 许可**:7-Zip 为 GNU LGPL + unRAR 限制条款。自用无负担;若对外分发,请留意 LGPL 义务。 - **SmartScreen 拦截**:当前安装包无代码签名,在其他电脑首次运行会被 Windows 拦截, 需点击「仍要运行」(自用 + 小范围分发普遍可接受)。如需消除,可对安装包做代码签名。 - **已支持**:内容预览 / 选择性解压、加密、分卷首卷读取、跟随系统主题。 - **暂未包含**:分卷**压缩**(`-v`)。 --- ## 🗺 后续可扩展 - 资源管理器右键菜单(右键直接压缩 / 解压) - 批量任务队列(多任务顺序执行) - 多格式互转(7z / zip / tar / gz 之间) - 压缩「覆盖 / 重命名」选项、记忆上次输出目录、解压后自动打开目录