C++ SHFileOperation实现文件、文件夹拷贝、删除、重命名
/// <summary>
/// 拷贝文件
/// </summary>
/// <param name="srcFile"></param>
/// <param name="destFile"></param>
/// <returns></returns>
int FastCopyFile(const char* srcFile, const char* destFile) {
if (nullptr == srcFile || nullptr == destFile)
{
return -1;
}
try
{
//文件复制,路径必须以"\0"即空为结尾
std::string src = srcFile + '\0\0';
std::string dest = destFile + '\0\0';
SHFILEOPSTRUCTA fop;
ZeroMemory(&fop, sizeof fop);
fop.wFunc = FO_COPY;
fop.pFrom = src.c_str();
fop.pTo = dest.c_str();
//不显示提示或错误对话框
fop.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR;
int ret = SHFileOperationA(&fop);
return ret;
}
catch (const std::exception&)
{
return -1;
}
}
/// <summary>
/// 重命名文件
/// </summary>
/// <param name="srcFile"></param>
/// <param name="destFile"></param>
/// <returns></returns>
int RenameFile(char* srcFile, char* destFile) {
if (nullptr == srcFile || nullptr == destFile)
{
return -1;
}
try
{
SHFILEOPSTRUCTA fop;
ZeroMemory(&fop, sizeof fop);
fop.wFunc = FO_RENAME;
fop.pFrom = srcFile;
fop.pTo = destFile;
//不显示提示或错误对话框
fop.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR;
int ret = SHFileOperationA(&fop);
return ret;
}
catch (const std::exception&)
{
return -1;
}
}
/// <summary>
/// 拷贝文件夹,包含文件
/// </summary>
/// <param name="srcDir"></param>
/// <param name="destDir"></param>
/// <returns></returns>
int CopyDirectory(const char* srcDir, const char* destDir) {
if (nullptr == srcDir || nullptr == destDir)
{
return -1;
}
try
{
HANDLE hFile;
WIN32_FIND_DATAA wfd; //数据结构;
char sz_path[MAX_PATH] = { 0 };
char buf[MAX_PATH * 2] = { 0 };
char fileName[MAX_PATH] = { 0 };
char temp[MAX_PATH] = { 0 };//临时数组;
char parseFileName[MAX_PATH] = { 0 };
strcpy_s(sz_path, srcDir);
strcat_s(sz_path, "\\*.*"); //匹配任何文件包括文件夹目录;
hFile = FindFirstFileA(sz_path, &wfd);
if (hFile != INVALID_HANDLE_VALUE)
{
do
{
if (wfd.cFileName[0] == '.') //如果是.或..则过滤;
continue;
else if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //如果是目录则递归;
{
strcpy_s(sz_path, srcDir);
strcat_s(sz_path, "\\");
strcat_s(sz_path, wfd.cFileName); //拼接目录全路径名;
FastCopyFile(sz_path, destDir);
}
else
{
strcpy_s(sz_path, srcDir);
strcat_s(sz_path, "\\");
strcat_s(sz_path, wfd.cFileName); //拼接目录全路径名;
FastCopyFile(sz_path, destDir);
}
} while (FindNextFileA(hFile, &wfd));
}
return 0;
}
catch (const std::exception&)
{
return -1;
}
}
关于SHFileOperation函数的补充
C++ SHFileOperation实现文件、文件夹拷贝、删除、重命名相关推荐
- Qt中对文件的拷贝删除重命名等操作
1.删除指定路径的文件. //删除文件.返回一个bool值,判断是否成功删除,如果路径不存在这些,则返回false. QFile file("c:/users/administrator/d ...
- 文件(夹)批量重命名数字、字母、日期、中文数字大写小写
首先,需要用到的这个工具: 百度 密码:qwu2 蓝奏云 密码:2r1z 目标是重命名下面5个文件(也可以是文件夹等,任意),从大写中文数字"贰"开始 打开工具,找到"文 ...
- maya渲染帧拷贝删除重命名插件 tjh_copy_same_frame1.1 下载及教程
做分层渲染时经常遇到拷贝相同渲染帧的问题,对于动画中镜头不动的帧没有必要浪费渲染时间.于是写了这个小工具.方便渲染人员快速拷贝相同的渲染帧,插件的特色在于可以快速同时复制分层文件.只需要指定图片的总目 ...
- 电脑文件夹怎么批量重命名
不管你做什么工作,不管你能力如何,只要你有爱岗敬业的精神,才能把工作做好.那么你面对电脑文件夹是怎么管理的呢?你是否会定期对电脑文件夹进行批量重命名整理?其实对电脑文件夹的整理也是我们工作中很重要的一 ...
- 使用re进行文件夹的批量重命名
使用re进行文件夹的批量重命名 import os import re filepath = "E:\面授基础高等数学-汤家凤" # 文件夹路径 #对目录下的文件进行遍历 for ...
- php文件夹操作:读取文件夹、批量重命名文件
以读取从网上下载的评书解压后的文件夹为例,并批量重命名 文件夹内容如下,现在使用php读取这个文件夹里面的文件,并批量重命名为"隋唐演义+序号.mp3"的格式: <?php ...
- linux 移动剪切命令,Linux移动剪切文件和目录命令-Linux重命名文件和目录命令-Linux mv命令详解-嗨客网...
Linux移动或重命名文件或目录(mv)教程 在 mv 命令会根据第二个参数类型的不同(是目标文件还是目标目录),将文件重命名或将其移至一个新的目录中.当第二个参数类型是文件时,mv 命令完成文件重命 ...
- (转)Windows重启延迟删除,重命名技术原理
所谓重启延迟删除技术,就是在操作系统启动前删除或者替换文件! 说起重启延迟删除,大家可能都很陌生,但是实际上,该功能已经被各种软件所采用:如安装Windows 补丁程序(如:HotFix.Servic ...
- c语言如何重命名文件夹,VC 复制移动删除重命名文件文件夹
/* 能产生对话框的标志: FOF_SILENT //progress dialog FOF_RENAMEONCOLLISION //replace dialog FOF_NO ...
- linux 复制并创建文件夹,Linux_文件及文件夹[创建][复制][移动][删除][重命名]
一.文件/文件夹创建 1.文件的创建 touch , vi/vim/nano , ... 语 法: touch [-acfm][-d ][-r ][-t ] [--help] [--version ...
最新文章
- opencv std::vectorcv:Mat
- 自动化机器学习(二)自动构建机器学习流水线
- scala N99(18-28)
- 对象构造函数的原型图
- 开工大吉:Oracle 18c已经发布及新特性介绍
- 又拍云 php5月18号那,又拍云每月免费CDN空间和流量
- (原)Lazarus 异构平台下多层架构思路、DataSet转换核心代码
- 计算机网络课程设计报告
- ASP.Net网站管理工具配置
- java tbase_TBase备份恢复实验
- (超全)全面手动清理c盘的的步骤
- webpackjsonp 还原_冰点还原标准版v8.56.020.5542——墨涩网
- 洛谷 P1007 独木桥 思维
- 第六次作业——潘芊睿
- html拖拽模态框,bootstrap模态框实现拖拽效果
- Ajax提交与submit提交对比
- clk子系统 - 代码分析
- kafka中leader和follower、AR、ISR、OSR、Controller的选举、为什么不能通过ZK的方式来选举partition的leader?
- 数字图像处理期末大作业 完成总结
- 今年 NFT 爆火,如何快速入行?(艺术家完整指南)
热门文章
- 【硬石科技】电机系列教学(基于STM32)——PID算法实现闭环控制
- ansys 螺栓连接仿真思路
- java打包文件生成zip压缩包
- linux安装vim不成功,centos安装vim失败解决
- c语言产生不同随机数,怎样用c语言产生不同的随机数
- 山海演武传·黄道·第一卷 雏龙惊蛰 第四章 异兽
- 机器学习算法——支持向量机SVM7(支持向量回归)
- 通用Excel库存管理系统 最好用的Excel出入库管理表格 带VBA源代码,代码公开【亲测非常好用】
- Sklearn中的二分类模型可以进行多分类的原理
- asp毕业设计——基于asp+access的工资管理系统设计与实现(毕业论文+程序源码)——工资管理系统