博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++_SHFileOperation文件夹操作
阅读量:6711 次
发布时间:2019-06-25

本文共 2137 字,大约阅读时间需要 7 分钟。

hot3.png

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;              //一定要是NULLFileOp.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

你可能感兴趣的文章
PowerDesigner列名、注释内容互换
查看>>
[译] 利用 Immutability(不可变性)编写更为简洁高效的代码
查看>>
云终端推动证券网系统升级
查看>>
Alibaba Cloud Network Attached Storage Now Available
查看>>
Schema命名空间示例
查看>>
ASP.NET Web API路由系统:路由系统的几个核心类型
查看>>
XSKY加盟“未来就绪企业云联盟”
查看>>
CloudCC:如何将CRM变成企业发展战略
查看>>
某研究院dell存储 raid5 XFS磁盘阵列数据丢失恢复案例
查看>>
Java 访问 C++ 方法 JavaCPP
查看>>
关注数据中心“减负” WD助力绿色存储
查看>>
中国人工智能学会通讯——AI如何深度应用于消费金融的风控决策 1.2 在人工智能的业务实践中,长尾数据和特征能很大提升信用评分的准确性。...
查看>>
如何对有双因子认证站点进行钓鱼攻击?
查看>>
数据到底怎么用?运营报告的6个必备要素
查看>>
长见识了!5G竟然这样“改变社会”
查看>>
威胁情报 = 数据 + 人
查看>>
西门子与新创事业合作进军区块链微电网电力交易市场
查看>>
由学习《软件设计重构》所想到的代码review(一)
查看>>
业内人的“针砭时弊”:AI医疗界的3大乱象以及如何评价医学人工智能的成果?...
查看>>
美国科技股遭抛售 独立分析师为苹果鸣不平
查看>>