[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解压文件,以及文件解包的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享