天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 53|回复: 0

C++_SHFileOperation文件夹操作

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
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创建。

 

 

 

 

C++_SHFileOperation文件夹操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 11:34 , Processed in 0.149673 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表