VC调用ShellExecute压缩文件的实现

本文介绍了如何在VC程序中利用ShellExecute函数调用WinRAR进行文件压缩,首先检测U盘(假设为D盘),然后创建目标压缩文件夹,最后使用特定参数执行WinRAR进行同步压缩并包含子目录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在对话框中,添加了一个压缩按钮,想一键将数据直接压缩到U盘中。

    首先要先确定U盘是否插入,这里系统只有一个C盘,所以U盘插入的时候自动是D盘了:

HANDLE hFile = CreateFile("\\\\.\\D:",
                       GENERIC_READ|GENERIC_WRITE,
                       FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
                       NULL,
                       OPEN_EXISTING,
                       0, 
                       NULL);//检测U盘


if(hFile==INVALID_HANDLE_VALUE)
{
MessageBox("请插入U盘");
return;
}
CloseHandle(hFile);

    其次在U盘中创建一个文件夹,将数据压缩到这个文件夹中:

CreateDirectoryA("D:\\dataq",NULL);//这个不带黑屏显示

当dataq文件夹存在时,此函数返回NULL,不存在时则创建,无论存不存在都能压缩,所以我也就没判断文件夹是否存在。刚开始用的是CreateFile来检测文件夹dataq是否存在,可是不对,它只创建了一个dataq的文件,而不是文件夹,所以后来就不用了,如下:

HANDLE hFile1 = CreateFile("\\\\.\\D:\\dataq",
                       GENERIC_READ|GENERIC_WRITE,
                       FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
                       NULL,
                       OPEN_ALWAYS,
                       0, 
                       NULL);//检测U盘

    之后要开始压缩了,我用的是ShellExecute语句,感觉这个比较简单

  HANDLE pEt=ShellExecute(NULL,"open","D:\\Program Files\\WinRAR\\WinRAR.exe","a -as -r D:\\dataq\\data3.rar","C:\\data3",SW_HIDE); //SW_SHOW
  WaitForSingleObject(pEt,INFINITE); 

注意:a -as -r 这几个参数,a好像代表增加目录,as是同步压缩,就是当文件存在时可以替换掉里面的内容,-r是包括data3里的子目录,如果想压缩后删除data3里面的内容,可以在-r后面加上一句-df就行了,要加个空格,即 a -as -r  -df,具体命令可以自己查一下。

这是软件里的一个小功能,小弟刚学,如果哪里不对,请大家多多指教,期间得到了vc驿站和CSDN网友的帮助,在此表示十分感谢!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值