当前位置: 首页 > news >正文

Windows 使用 SHFileOperation 实现文件复制功能

SHFileOperation是Windows系统提供的文件操作函数,通过SHFILEOPSTRUCT结构体参数实现文件的复制、删除、移动及重命名等功能。该函数支持FO_COPY(复制)、FO_DELETE(删除)、FO_MOVE(移动)和FO_RENAME(重命名)四种操作类型。

经测试发现,相较于QFile::copy之类,使用SHFileOperation来实现文件复制的功能,在效率上有较大提升,示例代码如下:

void CopyFolder(TCHAR *srcFolder, TCHAR *dstFolder)
{SHFILEOPSTRUCT fop = {0};fop.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR;fop.wFunc = FO_COPY;//fop.pFrom = srcFolder;fop.pTo = dstFolder;SHFileOperation(&fop);
}

改进版本:

#include <shlobj.h>
#include <tchar.h>
#include <strsafe.h>// 返回值:0=成功,非0=错误码
int CopyFolder(LPCTSTR srcFolder, LPCTSTR dstFolder)
{// 验证源路径是否存在if (GetFileAttributes(srcFolder) == INVALID_FILE_ATTRIBUTES) {_tprintf(_T("源路径不存在: %s\n"), srcFolder);return ERROR_FILE_NOT_FOUND;}// 构建带双空终止符的路径TCHAR srcPath[MAX_PATH] = {0};TCHAR dstPath[MAX_PATH] = {0};StringCchCopy(srcPath, MAX_PATH, srcFolder);StringCchCopy(dstPath, MAX_PATH, dstFolder);// 强制添加双空字符(关键修复)srcPath[_tcslen(srcPath) + 1] = _T('\0');dstPath[_tcslen(dstPath) + 1] = _T('\0');SHFILEOPSTRUCT fop = {0};fop.wFunc = FO_COPY;fop.pFrom = srcPath;fop.pTo = dstPath;fop.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR | FOF_SILENT;// 执行操作并检查结果int result = SHFileOperation(&fop);if (result != 0) {_tprintf(_T("复制失败,错误码: 0x%08X\n"), result);return result;}return 0;
}

文章转载自:

http://vbG5e3dR.qkgwx.cn
http://7teQNWBJ.qkgwx.cn
http://6L6bprHq.qkgwx.cn
http://CWaklX4Z.qkgwx.cn
http://FF6aOjaQ.qkgwx.cn
http://uezKtX2i.qkgwx.cn
http://uaoSlMwd.qkgwx.cn
http://L3W5vjms.qkgwx.cn
http://gV9Jmcmi.qkgwx.cn
http://r2hpnWZK.qkgwx.cn
http://bXQhLqfs.qkgwx.cn
http://rD9pJC8K.qkgwx.cn
http://b8HAyJ3A.qkgwx.cn
http://l7f9FPGZ.qkgwx.cn
http://Sj7X5TTi.qkgwx.cn
http://BmFZ3giL.qkgwx.cn
http://dghjCayS.qkgwx.cn
http://FpVst68v.qkgwx.cn
http://Su1Hlb3k.qkgwx.cn
http://6Vm2L7yh.qkgwx.cn
http://7MxN4noo.qkgwx.cn
http://hXQW8HbV.qkgwx.cn
http://Mu8eoAMT.qkgwx.cn
http://q8siTOCz.qkgwx.cn
http://HruZFk4h.qkgwx.cn
http://6FJ53F38.qkgwx.cn
http://N5SVH7ZG.qkgwx.cn
http://JNo7ozQB.qkgwx.cn
http://svwFs668.qkgwx.cn
http://U9Cf7RPY.qkgwx.cn
http://www.dtcms.com/a/377660.html

相关文章:

  • Linux防火墙-Firewalld
  • 面壁智能开源多模态大模型——MiniCPM-V 4.5本地部署教程:8B参数开启多模态“高刷”时代!
  • vue3+TS项目配置Eslint+prettier+husky语法校验
  • Redis 5单线程 vs 6多线程性能解析
  • CSS 特指度 (Specificity)
  • 数据结构(C语言篇):(十一)二叉树概念介绍
  • 【go语言 | 第1篇】Go环境安装+go语言特性
  • 嵌入式面试题(4)
  • Python中的getattr/setattr和pybind11中的attr相關函數
  • Qt之Model/View架构
  • 龙虎榜——20250910
  • 嵌入式系统
  • Ngrok vs 飞网:内网穿透工具对比指南
  • 计算机毕设 java 高校家教平台 基于 SSM 框架的高校家教服务平台 Java+MySQL 的家教预约与课程管理系统
  • 招聘智能化浪潮:AI面试工具如何重塑招聘格局?
  • Java EE servlet与MySQL表单 工程实现增加查询数据
  • 上网管理行为-路由模式部署
  • Omni-UI:58同城鸿蒙ArkUI精心打造的UI组件库使用
  • 六自由度Stewart并联机器人simulink建模与模拟仿真
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘sympy’问题
  • 测试之道:从新手到专家实战(四)
  • 基于elementUI实现一个可编辑的表格(简洁版)
  • 智能美妆功能开发指南:直播美颜sdk的架构与算法解析
  • MySQL 浮点数、定点数与位类型:搞懂 3 类特殊数值的核心用法
  • 运动生理实验室解决方案 人体生理实验整体解决方案
  • Ping命令为何选择ICMP而非TCP/UDP?
  • 工业锅炉的“健康卫士”—状态监测与故障诊断
  • 大模型微调技术宝典:Transformer架构,从小白到专家
  • 同步框架与底层消费机制解决方案梳理
  • 计算机毕设 java 高校教材管理系统 基于 Java+SSM 的高校教材管控平台 Java+MySQL 的教材全流程管理系统