WINSHELLAPI int WINAPI SHFileOperation (LPSHFILEOPSTRUCT lpFIleOp);
函數中參數類型爲一個LPSHFILEOPSTRUCT結構,它包含有進行文件操作的各種信息,其具體的結構如下:
Typedef struct _ShFILEOPSTRUCT
{
HWND hWnd; //消息發送的窗口句柄;
UINT wFunc; //操作類型
LPCSTR pFrom; //源文件及路徑
LPCSTR pTo; //目標文件及路徑
FILEOP_FLAGS fFlags; //操作與確認標誌
BOOL fAnyOperationsAborted; //操作選擇位
LPVOID hNameMappings; //文件映射
LPCSTR lpszProgressTitle; //文件操作進度窗口標題
}SHFILEOPSTRUCT, FAR * LPSHFILEOPSTRUCT;
在這個結構中,hWnd是指向發送消息的窗口句柄,pFrom與pTo是進行文件操作的源文件名和目標文件名,它包含文件的路徑,對應單個文件的路徑字符串,或對於多個文件,必須以NULL作爲字符串的結尾或文件路徑名之間的間隔,否則在程序運行的時候會發生錯誤。另外,pFrom和pTo都支持通配符*和?,這大大方便了開發人員的使用。例如,源文件或目錄有兩個,則應是:char pFrom[]="d:\Test1\0d:\Text.txt\0",它表示對要D:盤Test1目錄下的所有文件和D:盤上的Text.txt文件進行操作。字符串中的""是C語言中的''的轉義符,'\0'則是NULL。wFunc 是結構中的一個非常重要的成員,它代表着函數將要進行的操作類型,它的取值爲如下:
·FO_COPY: 拷貝文件pFrom到pTo 的指定位置。
·FO_RENAME: 將pFrom的文件名更名爲pTo的文件名。
·FO_MOVE: 將pFrom的文件移動到pTo的地方。
·FO_DELETE: 刪除pFrom指定的文件。
使用該函數進行文件拷貝、移動或刪除時,如果需要的時間很長,則程序會自動在進行的過程中出現一個無模式的對話框(Windows操作系統提供的文件操作對話框),用來顯示執行的進度和執行的時間,以及正在拷貝、移動或刪除的文件名,此時結構中的成員lpszProgressTitle顯示此對話框的標題。fFlags是在進行文件操作時的過程和狀態控制標識。它主要有如下一些標識,也可以是其組合:
·FOF_FILESONLY:執行通配符,只執行文件;
·FOF_ALLOWUNDO:保存UNDO信息,以便在回收站中恢復文件;
·FOF_NOCONFIRMATION:在出現目標文件已存在的時候,如果不設置此項,則它會出現確認是否覆蓋的對話框,設置此項則自動確認,進行覆蓋,不出現對話框。
·FOF_NOERRORUI:設置此項後,當文件處理過程中出現錯誤時,不出現錯誤提示,否則會進行錯誤提示。
·FOF_RENAMEONCOLLISION:當已存在文件名時,對其進行更換文提示。
·FOF_SILENT:不顯示進度對話框。
·FOF_WANTMAPPINGHANDLE:要求SHFileOperation()函數返回正處於操作狀態的實際文件列表,文件列表名柄保存在hNameMappings成員中。
·SHFILEOPSTRUCT結構還包含一個SHNAMEMAPPING結構的數組,此數組保存由SHELL計算的每個處於操作狀態的文件的新舊路徑。
請注意:
LPCSTR pFrom; //源文件及路徑
LPCSTR pTo; //目標文件及路徑
路徑要注意,pFrom可以是多個路徑,每個路徑後都要加一個'\0'作爲結尾。