CPP使用命令行解壓7z文件

在項目中如果遇到7z文件時,可以使用命令行的方式解壓處理。

首先,7z命令行的使用可以參考這篇文章:https://www.cnblogs.com/Frank99/p/5951177.html

然後我們可以在代碼中使用ShellExecuteEx來調用7z命令行解壓文件,示例代碼如下:

        SHELLEXECUTEINFO ShExecInfo;
        ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
        ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
        ShExecInfo.hwnd = NULL;
        ShExecInfo.lpVerb = "open";
        ShExecInfo.lpFile = _7z_exe_path;                           // 7z程序的路徑
        ShExecInfo.lpParameters = cmd_line_param;                   // 7z解壓的命令行參數
        ShExecInfo.lpDirectory = NULL;
        ShExecInfo.nShow = SW_HIDE;                                 // 不顯示窗體
        ShExecInfo.hInstApp = NULL;
        ShellExecuteEx(&ShExecInfo);                                // 開始解壓
        WaitForSingleObject(ShExecInfo.hProcess, INFINITE);         // 等待7z解壓返回
        DWORD dwCode = 0;
        GetExitCodeProcess(ShExecInfo.hProcess, &dwCode);           // 獲取返回代碼
        if (dwCode != 0)
        {
            // 解壓失敗
        }
        else
        {
            // 解壓成功
        }

當然也可以使用Shellexecute/WinExec來調用7z程序解壓文件,但是由於這兩個函數調用後立即返回,所以不知道什麼時候文件解壓完成,只能手動調用Sleep函數來猜測何時解壓完成,然而當文件大小變化時Sleep時間卻不能動態變化,不夠靈活,所以最好還是使用ShellExecuteEx。

上面就是我對CPP中使用命令行解壓7z文件的一點總結,如有錯誤之處,請於評論處指出,不勝感激。

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