程序中使用7-zip(7z)压缩文件

Email:longsu2010 at yeah dot net

工作中难免遇到需要压缩文件的情况,比如有一千万个小文件,每个文件约100k,如果使用7-zip压缩后可能十几k,可以节省很多磁盘空间。

基于此就可以写一段程序调用7z来压缩这些小文件,压缩后将源文件删除。


7z的下载可以到如下网站,前者英文,后者中文。
http://www.7-zip.org/
http://sparanoid.com/lab/7z/
下载完成后安装即可。

打开命令提示符并切换到7z.exe所在目录(也可将7z拷贝到其他目录)
输入7z --help可以查看使用方法,如下图。


压缩文件举例
7z.exe a 123.html.7z 123.html
将123.html压缩到123.html.7z中

解压缩举例
7z.exe x 123.html.7z
解压123.html.7z到当前文件夹

使用场景
1.直接在cmd窗口或者批处理文件中使用。
2.在其他程序语言中作为外部命令使用,如在php程序中使用exec函数调用。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
7-zip 是一种高效的压缩算法,它能够提供比传统的 ZIP 压缩算法更高的压缩比率和更快的压缩速度。同时,它还支持多种压缩格式,包括 7z、ZIP、RAR、GZIP、TAR 等。 如果你想在 C 语言使用 7-zip压缩算法,你可以使用 7-zip 的 C SDK。该 SDK 提供了一组 C 语言 API,可以让你在你的程序使用 7-zip压缩和解压缩功能。 以下是使用 7-zip C SDK 进行压缩的基本步骤: 1. 包含 7-zip C SDK 的头文件。 ``` #include <7z.h> ``` 2. 定义一个结构体来存储压缩参数。 ``` CLzmaEncProps props; LzmaEncProps_Init(&props); props.level = 5; ``` 3. 打开要压缩的文件。 ``` HANDLE inFile = CreateFileA("input.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); ``` 4. 创建一个输出文件。 ``` HANDLE outFile = CreateFileA("output.7z", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); ``` 5. 初始化 7-zip 压缩库。 ``` ISzAlloc alloc = { SzAlloc, SzFree }; CLzmaEncHandle enc; LzmaEnc_Construct(&enc); LzmaEnc_Alloc(&enc, 1024 * 1024, &alloc, &alloc); LzmaEnc_SetProps(&enc, &props); LzmaEnc_WriteProperties(&enc, outFile); ``` 6. 压缩文件。 ``` const int bufferSize = 64 * 1024; Byte inBuffer[bufferSize]; Byte outBuffer[bufferSize]; SZ_RESULT res = SZ_OK; UInt32 inSize = 0; UInt64 outSize = 0; for (;;) { DWORD bytesRead = 0; if (!ReadFile(inFile, inBuffer, bufferSize, &bytesRead, NULL)) { res = SZ_ERROR_READ; break; } if (bytesRead == 0) { break; } inSize += bytesRead; SRes res = LzmaEnc_Encode(&enc, outBuffer, &outSize, inBuffer, bytesRead, LZMA_FINISH_ANY); if (res != SZ_OK) { break; } DWORD bytesWritten = 0; if (!WriteFile(outFile, outBuffer, outSize, &bytesWritten, NULL)) { res = SZ_ERROR_WRITE; break; } } ``` 7. 关闭文件和 7-zip 压缩库。 ``` CloseHandle(inFile); CloseHandle(outFile); LzmaEnc_Destroy(&enc); ``` 这就是使用 7-zip C SDK 进行压缩的基本步骤。你可以根据你的具体需求进行调整和修改。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值