一、開啟乙個檔案目錄
實現這個功能要呼叫
windows api
函式shbrowseforfolder,入參為browseinfo結構的指標,返回乙個itemidlist型別的指標,通過這個指標呼叫函式shgetpathfromidlist可以確定所選擇的目錄的全名稱。
首先要包含標頭檔案shlobj.h
建立乙個如圖所示的對話方塊,呼叫函式:
lpitemidlist shbrowseforfolder(
lpbrowseinfolpbi
);
如果使用者選擇了「取消」,此函式返回
null。
引數:(用來傳遞和接收函式的資訊)
typedef struct _browseinfo browseinfo, *pbrowseinfo, *lpbrowseinfo;
一般可以不用設計**函式(將
lpfn
賦值null
),除非有特殊的處理時,如:,將「確定」按鈕不可用;
**函式:
int callback browsecallbackproc(
hwndhwnd,//
瀏覽對話方塊的窗體控制代碼,用這控制代碼給上圖對話方塊發訊息改變其狀態(sendmessage)
uintumsg,//
瀏覽對話方塊返回的訊息
lparamlparam,//
訊息引數
lparamlpdata //browseinfo
結構傳遞的引數
);
把專案標示符表(
lpitemidlist
型別,shbrowseforfolder
函式的返回值)轉換為檔案路徑:
bool shgetpathfromidlist(
lpcitemidlistpidl, //
專案標示符表
lptstrpszpath //
返回的檔案路徑
);
總結:
使用這個對話方塊來獲得資料夾路徑的步驟是: 1
、宣告browseinfo
結構體物件,填充其各欄位; 2
、把上面的結構体作引數,呼叫
shbrowseforfolder
函式,獲取其返回值為
lpitemidlist
型別物件; 3
、以上個函式的返回值(
lpitemidlist
型別)作為
shgetpathfromidlist
函式的第乙個引數,其第二個引數傳出獲取的資料夾路徑; 4
、另外,可以設計**函式,給對話方塊傳送訊息,和接受對話方塊的訊息來進行響應。
舉個例子(控制台程式): /*
開啟乙個資料夾,在視窗列印檔案路徑*/
#include
using namespace std;
#include
#include
#include
int callback browsecallbackproc(hwnd hwnd,
uint umsg,
lparam lparam,
lparam lpdata )
else
}
return 0; }
void main()
else
}
二、複製,移動,重新命名或刪除檔案或資料夾
有如下圖所示的檔案飛行動畫:
要包含標頭檔案
shellapi.h
進行拷貝,移動,重新命名或刪除檔案或資料夾
(包含其子檔案、子資料夾
)的函式:
int shfileoperation(
lpshfileopstructlpfileop
);
其引數是乙個
shfileopstruct
typedef struct _shfileopstruct shfileopstruct, *lpshfileopstruct;
#include
// 複製
source.txt
到dest.txt;
char *from = "c://source.txt/0";
char *to = "c://dest.txt/0";
shfileopstruct op;
zeromemory(&op, sizeof(op));
op.hwnd = null;
//
主窗體或應用程式的控制代碼
op.wfunc = fo_copy;
op.pfrom = from;
op.pto = to;
op.fflags= 0;
shfileoperation( &op);
//
移動source.txt
到windows
的臨時目錄
char *from = "c://source.txt/0";
char *to = "c://windows//temp/0";
shfileopstruct op;
zeromemory(&op, sizeof(op));
op.hwnd = null;
op.wfunc = fo_move;
op.pfrom = from;
op.pto = to;
op.fflags= 0;
shfileoperation( &op);
//
把所有的臨時檔案刪除到**站
char *file = "c://windows//temp//*.tmp/0";
shfileopstruct op;
zeromemory(&op, sizeof(op));
op.hwnd = null;
op.wfunc = fo_delete;
op.pfrom = file;
op.fflags= fof_allowundo;
shfileoperation( &op);
php 目錄處理函式
之前我們處理的全都是檔案,那目錄和資料夾怎麼處理呢?我們就來學習目錄或者稱為資料夾的處理相關函式。處理資料夾的基本思想如下 1.讀取某個路徑的時候判斷是否是資料夾 2.是資料夾的話,開啟指定資料夾,返回檔案目錄的資源變數 3.使用readdir讀取一次目錄中的檔案,目錄指標向後偏移一次 4.使用re...
shell指令碼實現遞迴處理檔案和目錄
分享自己的第乙個shell指令碼,邏輯可能不嚴謹,望大家多多指點。要求 遞迴將所有的檔案賦權為440,目錄賦權為550。如下 bash 在這裡插入 片 bin bash modify files 440 r r modify directory 550 r xr x recursively find...
shell遍歷目錄
bin bash list alldir if gt 0 then list alldir 1 else list alldir fi root gbackup1 zhaoyj chmod x bianli.sh root gbackup1 zhaoyj bianli.sh home sysadmi...