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

相关文章
相关标签/搜索