VC呼叫ShellExecute壓縮檔案的實現

2021-06-09 04:24:44 字數 1233 閱讀 8577

在對話方塊中,新增了乙個壓縮按鈕,想一鍵將資料直接壓縮到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)

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網友的幫助,在此表示十分感謝!

VC 呼叫外部程式

有三種sdk函式可以呼叫,分別是 winexec,shellexecute,createprocess 其中以winexec最為簡單,主要是呼叫windows程式.shellexecute比winexec靈活一些,主要是呼叫dos程式。createprocess最為複雜但是使用最靈活。1.winex...

VC動態呼叫DLL

1.生成dll extern c declspec dllexport char sendmess char buffer,int length 呼叫的時候要先給buffer分配記憶體 new 不然會出10014的錯誤.10014 系統檢測到在乙個呼叫中嘗試使用指標引數時的無效指標位址。2.動態呼叫...

利用vc呼叫dll

一時興起,研究下關於dll的呼叫,算是作為我首次發表文章啦,怎麼說也是我的處子作啊 好吧入正題啦 關於dll的呼叫,查了下資料,有兩種 一 靜態呼叫 二 動態呼叫,下面是分別的呼叫方法 一 靜態呼叫 3 用vc開啟mytest工程,選中工程,然後選擇vc選單下的project settings 二 ...