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建立。