C++_SHFileOperation文件夹操作

SHFileOperation: 可以实现各种文件操作,如文件的拷贝、删除移动等 .
需要的库文件:
#include <Shlwapi.h>
#pragma comment (lib,"Shlwapi.lib")

SHFileOperation函数的定义形式为:

int SHFileOperation( _Inout_ LPSHFILEOPSTRUCT lpFileOp);

参数: lpFileOp : 一个指向SHFILEOPSTRUCT结构的指针

返回值:0:成功;2:系统不能找到指定的文件;7: 取消是否想要置换给定文件的询问,存储控制块被销毁。115:试图重命名文件到不同的文件夹。重命名文件只是改变文件名,而不能改变文件夹。117:目的路径中有错误或取消了新目录的建立时,123:试图重命名一个已经存在的文件。1026:移动或拷贝一个不存在的文件(设置FOF_NOERRORUI可解决)

SHFILEOPSTRUCT:

SHFILEOPSTRUCT结构体的定义如下:

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   : 如果操作出错,不显示用户接口

具体用法如例:

拷贝:

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))
   //失败

删除:

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

转载于:https://my.oschina.net/u/2930533/blog/917194

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值