接到個需求,要把一個.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文件
文件格式待整理。