文章目录

  • 1、简介
    • 1.1、问题描述
    • 1.2、解决方案
  • 2、源代码
    • 2.1、WinAPI调用
    • 2.2、两行代码解决Release版本根目录驱动问题
    • 2.3、解决部分文件删除不成功的问题
  • 3、QFileInfo官方说明
  • 4、Qt 5.15版本的功能

1、简介

写这篇文章之前,已经看过很多类似的文章,都没有实质性的解决这个问题。

1.1、问题描述

原本程序在main函数中直接调用WinAPI删除文件或者文件夹到回收站,无论在Debug版本还是Release版本都不会有问题。但是如果封装成函数或者类,在栈中或者堆中去执行的时候,Release版本的驱动器根目录下就会必然不成功。

1.2、解决方案

看了Windows回收站的工作原理,才知道文件或者文件夹在删除到回收站时,实际上并没有被删除而是从所在目录更改到所在磁盘的Recycled文件夹。Recycled这个文件夹实际上是不公开的,可以通过更改计算机属性得到。就算我们清空回收站,也是将文件在注册表中的信息删除,硬盘中还有此文件,只不过通过正常方式找不到,并且其磁区不受保护,可能会被其他文件占据。

那么我们是不是就可以从这点入手,既然Debug版本没问题和Release版本有问题,但是接口依然能执行成功,我怀疑是Qt的Release版本在执行函数时,没有对文件信息进行更新获取。那么只需要更新获取一下此文件的信息就能解决此问题。

2、源代码

2.1、WinAPI调用

// 删除文件到回收站
bool deleteFileToCrash(QString name)
{qDebug() << "deleteStr name:" << name;bool ret = true;LPCTSTR lpSourceFile = name.toStdWString().c_str();SHFILEOPSTRUCT opRecycle;ZeroMemory(&opRecycle, sizeof(opRecycle));TCHAR ToBuf[MAX_PATH];TCHAR FromBuf[MAX_PATH];ZeroMemory(ToBuf, sizeof(ToBuf));ZeroMemory(FromBuf, sizeof(FromBuf));lstrcpy(FromBuf, lpSourceFile);opRecycle.hwnd              = Q_NULLPTR;opRecycle.wFunc             = FO_DELETE;opRecycle.pFrom             = FromBuf;opRecycle.pTo               = ToBuf;opRecycle.fFlags            = FOF_ALLOWUNDO | FOF_SILENT;opRecycle.fAnyOperationsAborted = FALSE;opRecycle.hNameMappings     = Q_NULLPTR;opRecycle.lpszProgressTitle = Q_NULLPTR;int returnVal = SHFileOperation(&opRecycle);qDebug() << "SHFileOperation end" << returnVal << opRecycle.fAnyOperationsAborted << GetLastError();if(returnVal != 0 || (opRecycle.fAnyOperationsAborted)) {qDebug() << "deleteFileToCrash error:" << returnVal;ret = false;}return ret;
}

2.2、两行代码解决Release版本根目录驱动问题

    QFileInfo fInfo(name);Q_UNUSED(fInfo)  // 这行代码只是不想使用这个fInfo

2.3、解决部分文件删除不成功的问题

是因为Windows对线程分配资源的问题,简单有效的方式:

        QFuture<bool> isOK = QtConcurrent::run(this, &SFileManager::deleteFileToCrash, QDir::toNativeSeparators(path));

3、QFileInfo官方说明

4、Qt 5.15版本的功能

QFile::moveToTrash方法将文件移动到垃圾箱或者回收站,在此版本之前的版本只能通过我写的方式去删除哈。

Qt开发 之 删除文件或文件夹到回收站(详解)相关推荐

  1. c++中.dll与.lib文件的生成与使用的详解

    c++中.dll与.lib文件的生成与使用的详解 --------------------------------------------------------------------------- ...

  2. 【运维】PowerShell编程 目录文件相关方法的封装与案例详解

    PowerShell 目录文件管理 目录文件相关方法的封装与案例详解 李俊才 的 CSDN 博客:https://blog.csdn.net/qq_28550263?type=blog 邮箱 :291 ...

  3. JS - 文件上传组件WebUploader使用详解1(带进度的文件上传

    一.基本介绍 1,什么是 WebUploader? WebUploader 是由百度公司团队开发的一个以 HTML5 为主,FLASH 为辅的现代文件上传组件. 官网地址:http://fex.bai ...

  4. AndroidManifest.xml文件配置教程及相关指令详解

    AndroidManifest.xml 是每个android程序中必须的文件,它位于整个项目的根目录.我们每天都在使用这个文件,往里面配置程序运行所必要的组件,权限,以及一些相关信息.但是对于这个文件 ...

  5. 把java文件打包成.jar (jar命令详解)

    把java文件打包成.jar (jar命令详解) 先打开命令提示符(win2000或在运行框里执行cmd命令,win98为DOS提示符),输入jar Chelp,然后回车(如果你盘上已经有了jdk1. ...

  6. android 7 apk 安装程序,Android安装apk文件并适配Android 7.0详解

    Android安装apk文件并适配Android 7.0详解 首先在AndroidManifest.xml文件,activity同级节点注册provider: android:name="a ...

  7. java文件打包jar文件_把java文件打包成.jar (jar命令详解)

    把java文件打包成.jar (jar命令详解) 先打开命令提示符(win2000或在运行框里执行cmd命令,win98为DOS提示符),输入jar Chelp,然后回车(如果你盘上已经有了jdk1. ...

  8. pydicom读取头文件_.dcm格式文件软件读取及python处理详解

    要处理一些.dcm格式的焊接缺陷图像,需要读取和显示.dcm格式的图像.通过搜集资料收集到一些医学影像,并通过pydicom模块查看.dcm格式文件. 若要查看dcm格式文件,可下echo viewe ...

  9. Linux下zip格式文件的解压缩与压缩操作命令详解

    < Linux下zip格式文件的解压缩与压缩操作命令详解 > * 声明:网上找来比较凌乱,整理了一下,方便自己查看 zip格式文件的解压缩与压缩操作: 1.把/home目录下面的huaza ...

  10. java文件流 m.jb51.net_FasfDFS整合Java实现文件上传下载功能实例详解

    今天使用Java代码实现文件的上传和下载.对此作者提供了Java API支持,下载fastdfs-client-java将源码添加到项目中.或者在Maven项目pom.xml文件中添加依赖 org.c ...

最新文章

  1. 模板 - 计算几何相关公式大全
  2. loj6300 「CodePlus 2018 3 月赛」博弈论与概率统计
  3. Qt设置应用程序图标
  4. Android自定义Shape
  5. 大数据在各行业中的应用表现
  6. 木桶问题MATLAB,物理实验绪论-喻小强.ppt
  7. 如何:使用 DataAnnotations 特性验证模型数据+MetadataType的使用,MVC的Model层数据验证 指定要与数据模型类关联的元数据类
  8. 精仿B站播放器外加弹幕库源码-带后台
  9. 互联网产品经理的工作职责
  10. 安全教育思维导图模板分享
  11. 助力网络安全发展,安全态势攻防赛事可视化
  12. 正则表达式regex(入门使用)
  13. 华为云IoT设备接入服务全体验
  14. 麒麟820和鸿蒙系统,网曝魅族正在适配麒麟820和鸿蒙系统,黄章:我怎么不知道...
  15. 过账期间未清和关帐过帐期间设置
  16. 基于ESP8266的四旋翼无人机代码分享,该无人机可以爬墙哦
  17. python中函数的定义_Python函数是什么_如何定义和调用函数?
  18. 003. 电话号码的字母组合——回溯算法
  19. 相机ISP图像处理流程
  20. Exchange 2010通配符SSL证书安装文档

热门文章

  1. lingo入门教程之二 --- 集合运用
  2. 大陆车牌识别算法的背景与技术
  3. 人工智能 - 虚拟人 - 2D/3D 动作捕捉
  4. IPO笔记之:关于自然人股东投资移民变更身份对IPO事宜之影响
  5. 今日头条推荐算法原理
  6. 解决uniapp运行到微信开发者工具报 [微信小程序开发者工具] [error] IDE service port disabled. To use CLI Call错误问题
  7. 阿里云服务器使用宝塔面板管理以及项目部署
  8. java 实验室预约系统_基于Java的实验室预约管理系统
  9. 关于Shine-hale
  10. HTML+CSS+JS网站设计——上海美食(8页) 酒水网页设计作业,甜品美食网页制作作业, 学生零食网页作业