/// <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实现文件、文件夹拷贝、删除、重命名相关推荐

  1. Qt中对文件的拷贝删除重命名等操作

    1.删除指定路径的文件. //删除文件.返回一个bool值,判断是否成功删除,如果路径不存在这些,则返回false. QFile file("c:/users/administrator/d ...

  2. 文件(夹)批量重命名数字、字母、日期、中文数字大写小写

    首先,需要用到的这个工具: 百度 密码:qwu2 蓝奏云 密码:2r1z 目标是重命名下面5个文件(也可以是文件夹等,任意),从大写中文数字"贰"开始 打开工具,找到"文 ...

  3. maya渲染帧拷贝删除重命名插件 tjh_copy_same_frame1.1 下载及教程

    做分层渲染时经常遇到拷贝相同渲染帧的问题,对于动画中镜头不动的帧没有必要浪费渲染时间.于是写了这个小工具.方便渲染人员快速拷贝相同的渲染帧,插件的特色在于可以快速同时复制分层文件.只需要指定图片的总目 ...

  4. 电脑文件夹怎么批量重命名

    不管你做什么工作,不管你能力如何,只要你有爱岗敬业的精神,才能把工作做好.那么你面对电脑文件夹是怎么管理的呢?你是否会定期对电脑文件夹进行批量重命名整理?其实对电脑文件夹的整理也是我们工作中很重要的一 ...

  5. 使用re进行文件夹的批量重命名

    使用re进行文件夹的批量重命名 import os import re filepath = "E:\面授基础高等数学-汤家凤" # 文件夹路径 #对目录下的文件进行遍历 for ...

  6. php文件夹操作:读取文件夹、批量重命名文件

    以读取从网上下载的评书解压后的文件夹为例,并批量重命名 文件夹内容如下,现在使用php读取这个文件夹里面的文件,并批量重命名为"隋唐演义+序号.mp3"的格式: <?php ...

  7. linux 移动剪切命令,Linux移动剪切文件和目录命令-Linux重命名文件和目录命令-Linux mv命令详解-嗨客网...

    Linux移动或重命名文件或目录(mv)教程 在 mv 命令会根据第二个参数类型的不同(是目标文件还是目标目录),将文件重命名或将其移至一个新的目录中.当第二个参数类型是文件时,mv 命令完成文件重命 ...

  8. (转)Windows重启延迟删除,重命名技术原理

    所谓重启延迟删除技术,就是在操作系统启动前删除或者替换文件! 说起重启延迟删除,大家可能都很陌生,但是实际上,该功能已经被各种软件所采用:如安装Windows 补丁程序(如:HotFix.Servic ...

  9. c语言如何重命名文件夹,VC 复制移动删除重命名文件文件夹

    /* 能产生对话框的标志: FOF_SILENT             //progress dialog FOF_RENAMEONCOLLISION //replace dialog FOF_NO ...

  10. linux 复制并创建文件夹,Linux_文件及文件夹[创建][复制][移动][删除][重命名]

    一.文件/文件夹创建 1.文件的创建 touch , vi/vim/nano , ... 语   法: touch [-acfm][-d ][-r ][-t ] [--help] [--version ...

最新文章

  1. opencv std::vectorcv:Mat
  2. 自动化机器学习(二)自动构建机器学习流水线
  3. scala N99(18-28)
  4. 对象构造函数的原型图
  5. 开工大吉:Oracle 18c已经发布及新特性介绍
  6. 又拍云 php5月18号那,又拍云每月免费CDN空间和流量
  7. (原)Lazarus 异构平台下多层架构思路、DataSet转换核心代码
  8. 计算机网络课程设计报告
  9. ASP.Net网站管理工具配置
  10. java tbase_TBase备份恢复实验
  11. (超全)全面手动清理c盘的的步骤
  12. webpackjsonp 还原_冰点还原标准版v8.56.020.5542——墨涩网
  13. 洛谷 P1007 独木桥 思维
  14. 第六次作业——潘芊睿
  15. html拖拽模态框,bootstrap模态框实现拖拽效果
  16. Ajax提交与submit提交对比
  17. clk子系统 - 代码分析
  18. kafka中leader和follower、AR、ISR、OSR、Controller的选举、为什么不能通过ZK的方式来选举partition的leader?
  19. 数字图像处理期末大作业 完成总结
  20. 今年 NFT 爆火,如何快速入行?(艺术家完整指南)

热门文章

  1. 【硬石科技】电机系列教学(基于STM32)——PID算法实现闭环控制
  2. ansys 螺栓连接仿真思路
  3. java打包文件生成zip压缩包
  4. linux安装vim不成功,centos安装vim失败解决
  5. c语言产生不同随机数,怎样用c语言产生不同的随机数
  6. 山海演武传·黄道·第一卷 雏龙惊蛰 第四章 异兽
  7. 机器学习算法——支持向量机SVM7(支持向量回归)
  8. 通用Excel库存管理系统 最好用的Excel出入库管理表格 带VBA源代码,代码公开【亲测非常好用】
  9. Sklearn中的二分类模型可以进行多分类的原理
  10. asp毕业设计——基于asp+access的工资管理系统设计与实现(毕业论文+程序源码)——工资管理系统