目錄處理的Shell函式

2021-04-02 17:35:02 字數 3448 閱讀 1459

一、開啟乙個檔案目錄

實現這個功能要呼叫

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...