C++_SHFileOperation文件夾操做

SHFileOperation: 能夠實現各類文件操做,如文件的拷貝、刪除移動等 .
須要的庫文件:
#include <Shlwapi.h>
#pragma comment (lib,"Shlwapi.lib")api

SHFileOperation函數的定義形式爲:app

int SHFileOperation( _Inout_ LPSHFILEOPSTRUCT lpFileOp);

參數: lpFileOp : 一個指向SHFILEOPSTRUCT結構的指針函數

返回值:0:成功;2:系統不能找到指定的文件;7: 取消是否想要置換給定文件的詢問,存儲控制塊被銷燬。115:試圖重命名文件到不一樣的文件夾。重命名文件只是改變文件名,而不能改變文件夾。117:目的路徑中有錯誤或取消了新目錄的創建時,123:試圖重命名一個已經存在的文件。1026:移動或拷貝一個不存在的文件(設置FOF_NOERRORUI可解決)spa

SHFILEOPSTRUCT:指針

SHFILEOPSTRUCT結構體的定義以下:code

typedef struct _SHFILEOPSTRUCT { // shfos
    HWND         hwnd; //顯示狀態信息窗口的句柄,通常設爲主窗體的句柄
    UINT         wFunc; //要執行的操做
    LPCSTR       pFrom; //源文件或目錄
    LPCSTR       pTo; //目標文件或目錄
    FILEOP_FLAGS fFlags; //控制文件操做的標誌
    BOOL         fAnyOperationsAborted; //操做是否放棄
    LPVOID       hNameMappings; //文件名映射對象的句柄,不多用
    LPCSTR       lpszProgressTitle; //進度條標題,僅在fFlags標誌中指定了//FOF_SIMPLEPROGRESS時有效
} SHFILEOPSTRUCT, FAR *LPSHFILEOPSTRUCT;

第二個參數:wFunc: FO_MOVE :移動, FO_COPY :複製, FO_DELETE :刪除(源文件), FO_RENAME :重命名(源文件)。第五個參數:fFlags:   FOF_MULTIDESTFILES : 目標文件是多個文件 , FOF_CONFIRMMOUSE :。。。。 FOF_SILENT :不建立進度條, FOF_RENAMEONCOLLISION : 當目標文件已存在時,將源文件更名再複製或移動 , FOF_NOCONFIRMATION  : 操做過程當中不顯示確認信息,至關於用戶選擇了「yes to all」 , FOF_WANTMAPPINGHANDLE : 填充 hNameMappings 成員 (第七個參數),   FOF_ALLOWUNDO : 容許撤銷操做 ,   FOF_FILESONLY : 只操做文件 , FOF_SIMPLEPROGRESS : 顯示進度條對話框但不顯示文件名 ,   FOF_NOCONFIRMMKDIR  : 新建目錄時不提示確認 , FOF_NOERRORUI   : 若是操做出錯,不顯示用戶接口對象

具體用法如例:接口

拷貝:get

strSrcPath.TrimRight('\\');//源文件路徑
strDestPath.TrimRight('\\');//目標文件路徑
strSrcPath += _T('\0');
strDestPath+= _T('\0');
SHFILEOPSTRUCT si = {0};
si.hwnd = ::GetDesktopWindow();
si.wFunc = FO_COPY;
si.pFrom = strSrcPath;
si.pTo = strDestPath;
si.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR|FOF_SILENT;
if(0 != SHFileOperation(&si))
   //失敗

刪除:it

strDelPath.TrimRight('\\');
strDelPath += _T('\0');
SHFILEOPSTRUCT FileOp={0};
FileOp.pFrom =    strDelPath;
FileOp.pTo     =    NULL;              //必定要是NULL
FileOp.fFlags=    FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
FileOp.wFunc =    FO_DELETE;            //刪除操做

int bRet = SHFileOperation(&FileOp);
if (0 != bRet)
   return ; //失敗

刪除的話會把整個文件夾刪除掉,若是隻想刪除文件夾下的內容,保留文件夾的話,可先刪除後在CreateDirectory建立。

相關文章
相關標籤/搜索