在項目中如果遇到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文件的一點總結,如有錯誤之處,請於評論處指出,不勝感激。