使用ShellExecuteEx调用WinRAR.exe压缩文件夹(保留路径)

话不多说,先上一段代码(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组合的作用是在删掉基础路径的基础上保留路径压缩,上个图解释一下:
压缩前:压缩前位于桌面的test文件夹
压缩后压缩后的test.zip
还要提一点,参数a如果目标压缩包不存在的话,则会创建一个新的压缩包,如果目标压缩包存在,则会将压缩的文件追加进去,重名替换。

2.事实上如果运行的是winrar.exe的话,我们设置的ShExecInfo.nShow并没有什么效果,SW_HIDE不能时运行界面隐藏起来
想隐藏起来怎么办呢,选择执行rar.exe。这个程序和winrar.exe是在一个文件夹中的,所以只需要在执行路径处用rar.exe替换winrar.exe即可,命令什么的都是一样的。

大体上就是这些,肯定会一些不足的地方,欢迎大家讨论指出。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值