[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文件

文件格式待整理。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章