关于windows下C++实现解压、压缩 .tar.gz文件

        本人不才,第一次发帖,若有不足之处,望多指建。

        关于windows下C++实现解压、压缩 .tar.gz文件,由于需要在实际项目中运用,本人找到了好多资料,貌似都没什么用处,好不容易找个tar组件命令行模式的,解压压缩倒是没什么问题,可以文件权限全都被改变,在设备上无法执行。又在网上找了许多资料,还是没什么眉目。望着电脑屏幕的时候,突然想着7z的有个帮助文档,文档说明了一些命令操作。于是就模仿tar组件模式,自己组建7z组件模式。

首先,在7z安装目录中,找到三个文件,一个可执行程序(7z.exe),连个动态库(7z.dll和7-zip.lib),并将它们放在同一个目录下,如目录名为7z。7z安装目录下还有个一个帮助文档,这个很重要,对构建7z命令很有参考价值。

        现在开始写实验代码。经过验证,没有7-zip.dll是可以解压压缩的,是否有其他影响还没验证过,为了适用于7z所有命令,最好两个都加上。为了观察解压和压缩过程,需要建一个控制台应用程序,并将7z放到可执行程序同级目录下。

我的实验文件是web文件夹,里面有任意内容文件夹和文件,该web文件夹放在7z目录下。


      说明:7z压缩成.tar.gz需要两步走,先压缩成.tar,再压缩成.tar.gz,解压是两步,先解压到.tar,再解压出文件

     实例代码:

//获取路径,构建路径
char chBuf[MAX_PATH];
GetModuleFileName(NULL, chBuf, MAX_PATH);
std::string strExePath = chBuf;
int nPos = strExePath.find_last_of("\\") + 1;
strExePath = strExePath.substr(0, nPos);
std::string strSrcPath = strExePath + "7z\\web";
//压缩处理,具体命令操作及参数详见7z帮助文档
//先压缩成.tar文件
std::string strCommand = "cd ";
strCommand += strExePath + "7z && 7z.exe a -ttar web.tar " + strSrcPath;

//可接收返回值判断执行结果
int nRet = ::system(strCommand.c_str());
//再压缩成.tar.gz文件
strCommand = "cd " + strExePath + "7z && 7z.exe a -tgzip web.tar.gz web.tar";
nRet = ::system(strCommand.c_str());


解压处理,具体命令操作及参数详见7z帮助文档
先解压.tar.gz文件
//std::string strCommand = "cd ";
//strCommand += strExePath + "7z && 7z.exe x web.tar.gz -o" + strExePath + "\\7z";

可接收返回值判断执行结果
//int nRet = ::system(strCommand.c_str());
再解压.tar文件
//strCommand = "cd " + strExePath + "7z && 7z.exe x web.tar -o"+ strExePath + "\\7z";
//nRet = ::system(strCommand.c_str());


虽然说这是C++写的,但这个思路在其他语言也是行得通的,在linux等别的操作系统也是可以的,而且7z的压缩比比一般的压缩高一点。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值