话不多说,先上一段代码(C++)
CString strDes = _T("这里是生成压缩包绝对路径,原来可以有也可以没有");
CString strSrc = _T("这是是需要压缩的文件夹路径,要在最后加/");//如:C:/Users/Administrator/Desktop/test/
CString strShell;
strShell.Format(_T("a -ep1 -r \"%s\" \"%s\""),strDes,strSrc);//如果这里是直接写路径的话,注意斜杆的方向都为'/',参数会在后面说
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);//无特殊需求默认就好
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;//无特殊需求默认就好
ShExecInfo.hwnd = NULL;//无特殊需求默认就好
ShExecInfo.lpVerb = "open";//无特殊需求默认就好
ShExecInfo.lpFile = _T("C:/Program Files/WinRAR/WinRAR.exe");//直接写路径的话,注意斜杠方向
ShExecInfo.lpParameters = strShell;//无特殊需求默认就好
ShExecInfo.lpDirectory = NULL;//无特殊需求默认就好
ShExecInfo.nShow = SW_HIDE;//使调用的窗口不可见,这里有问题,后面说
ShExecInfo.hInstApp = NULL;//无特殊需求默认就好
BOOL isShellExeSuccess = ShellExecuteEx(&ShExecInfo);
if (!WaitForSingleObject(ShExecInfo.hProcess,INFINITE))
{
//调用的程序结束后再执行下一步操作
}
1.首先是关于winrar.exe的参数和开关,给个链接https://www.cnblogs.com/fetty/p/4769279.html 吧,就不再说了。
值得一提的是,这些开关是可以自由组合的,大家可以按照自己的需求适当的组合一些参数,比如上面代码中的 -ep1 -r组合的作用是在删掉基础路径的基础上保留路径压缩,上个图解释一下:
压缩前:
压缩后
还要提一点,参数a如果目标压缩包不存在的话,则会创建一个新的压缩包,如果目标压缩包存在,则会将压缩的文件追加进去,重名替换。
2.事实上如果运行的是winrar.exe的话,我们设置的ShExecInfo.nShow并没有什么效果,SW_HIDE不能时运行界面隐藏起来。
想隐藏起来怎么办呢,选择执行rar.exe。这个程序和winrar.exe是在一个文件夹中的,所以只需要在执行路径处用rar.exe替换winrar.exe即可,命令什么的都是一样的。
大体上就是这些,肯定会一些不足的地方,欢迎大家讨论指出。