[C++杂谈]——使用7-zip和winrar解压文件,以及文件解包

2021/5/17 12:30:39

本文主要是介绍[C++杂谈]——使用7-zip和winrar解压文件,以及文件解包,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

接到个需求,要把一个.gz文件解压出来,得到.dat文件。这个dat文件是按照一定的格式组成的包,需要将他按照文件结构再次解压一遍,得到真正想要的文件。以前做过使用WinRAR解压zip文件的需求,在此将两个记录一下,以便日后查阅。

一、解压.gz文件

1.下载7-zip,安装,获得其7z.exe以及7z.dll
2.使用cmd命令行,解压文件,命令:7z.exe e "E:/abc.gz" -y -aos -o"E:/abc"
3.命令解释:e(解压),"E:/abc.gz"(文件绝对路径) -y(使用默认选项) -aos(跳过一寸在文件) -o"E:/abc"(指定生成的目录,会自动创建不存在的目录)
4.使用ShellExecute(NULL,"open","*//7z.exe",sParam,NULL,SW_SHOW)执行命令,其中sParam为第2点命令中除去7z.exe的其他内容

二、解压.zip文件

上面的7zip随程序打包使用,但是WinRAR一般在windows下都会安装。因此可以从注册表获取WinRAR的安装路径,然后使用ShellExecute来执行相关内容。
1.获取WinRAR安装路径
bool fnGetWinRarPath(CString &csPath)
{
    csPath.Empty();
    HKEY hKey;
    LPCTSTR Rgspath = _T("Software\\Classes\\WinRAR\\Shell\\open\\command");
    long ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, Rgspath, 0, KEY_READ, &hKey);
    if (ERROR_SUCCESS != ret)
    {
        RegCloseKey(hKey);
        return false;
    }

    DWORD type = REG_SZ;
    BYTE byPathInfo[MAX_PATH];
    DWORD dwInfoSize = 0;
    ret = RegQueryValueEx(hKey, _T(""), NULL, &type, byPathInfo, &dwInfoSize);
    if (ERROR_SUCCESS != ret)
    {
        RegCloseKey(hKey);
        return false;
    }

    csPath.Format("%s", byPathInfo);
    return true;
}
2.cmd执行的命令,同7zip
3.一个网上找的cmd命令示例:C:\Program Files\WinRAR\WinRAR.exe x -iext -ow -ver -- "d:\png.rar" d:\png\(将d:\png.rar解压到d:\png\目录下)

三、解包.dat文件

文件格式待整理。


这篇关于[C++杂谈]——使用7-zip和winrar解压文件,以及文件解包的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程