Qt:正确判断文件、文件夹是否存在的方法
一直对Qt的isFile、isDir、exists这几个方法感到混乱,不知道到底用哪个,网上搜了下资料,也是用这几个方法
但是都没有对其深究,经过测试发现会存在问题,先看看下面的测试代码
- {
- QFileInfo fi("C:/123"); // 目录存在
- qDebug() << fi.isFile(); // false
- qDebug() << fi.isDir(); // true
- qDebug() << fi.exists(); // true
- qDebug() << fi.isRoot(); // false
- qDebug() << QFile::exists("C:/123"); // true
- qDebug() << QDir("C:/123").exists(); // true
- fi.setFile("C:/ABC"); // 目录不存在
- qDebug() << fi.isFile(); // false
- qDebug() << fi.isDir(); // false
- qDebug() << fi.exists(); // false
- qDebug() << fi.isRoot(); // false
- qDebug() << QFile::exists("C:/ABC"); // false
- qDebug() << QDir("C:/ABC").exists(); // false
- fi.setFile("C:/"); // 存在的驱动器
- qDebug() << fi.isFile(); // false
- qDebug() << fi.isDir(); // true
- qDebug() << fi.exists(); // true
- qDebug() << fi.isRoot(); // true
- qDebug() << QFile::exists("C:/"); // true
- qDebug() << QDir("C:/").exists(); // true
- fi.setFile("Z:/"); // 不存在的驱动器
- qDebug() << fi.isFile(); // false
- qDebug() << fi.isDir(); // false
- qDebug() << fi.exists(); // false
- qDebug() << fi.isRoot(); // false
- qDebug() << QFile::exists("Z:/"); // false
- qDebug() << QDir("Z:/").exists(); // false
- fi.setFile("C:/123.lnk"); // 快捷方式存在且指向的文件也存在
- qDebug() << fi.isFile(); // true
- qDebug() << fi.isDir(); // false
- qDebug() << fi.exists(); // true
- qDebug() << fi.isRoot(); // false
- qDebug() << QFile::exists("C:/123.lnk"); // true
- qDebug() << QDir("C:/123.lnk").exists(); // false
- fi.setFile("C:/456.lnk"); // 快捷方式存在但指向的文件不存在
- qDebug() << fi.isFile(); // false
- qDebug() << fi.isDir(); // false
- qDebug() << fi.exists(); // false
- qDebug() << fi.isRoot(); // false
- qDebug() << QFile::exists("C:/456.lnk"); // false
- qDebug() << QDir("C:/456.lnk").exists(); // false
- }
可以看到,容易让人感到混乱的是exists方法,这个方法是通用的判断方法,可以看成是这样的表达式
exists() == (isFile() || isDir())
这也是我想说明的问题,网上一些博文中提出的判断文件或文件夹用exists方法是不严谨的
比如你的本意是判断文件是否存在,但文件不存在,而恰巧有个同名的文件夹,那么exists也会返回true。文件夹也是同理
根据上面的代码作出的一点总结
准确判断文件是否存在
1.用QFileInfo::isFile()方法
准确判断文件夹是否存在
1.用QFileInfo::isDir()方法
2.用QDir::exists()方法
不确定字符串是文件还是文件夹路径
1.用QFileInfo::exists()方法
2.用QFile::exists()方法
http://blog.csdn.net/aqtata/article/details/18016467
Qt:正确判断文件、文件夹是否存在的方法的更多相关文章
- Qt 如何判断文件是不是一个目录
做个文件管理系统的时候碰到的question,下面来讲解下方法,因为在网上都没找到,就只能翻官方文档相关信息结果找到isFile(),isDir(); 因为是文件管理系统,那么肯定现先获取到它的路径以 ...
- Qt打开外部程序和文件夹需要注意的细节(Qt调用VC写的动态库,VC需要用C的方式输出函数,否则MinGW32编译过程会报错)
下午写程序中遇到几个小细节,需要在这里记录一下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 QProcess *process = new QProcess(this ...
- JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤
JAVA之旅(二十八)--File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤 我们可以继续了,今天说下File 一.File概述 文件的操作是非常 ...
- C/C++判断文件/文件夹是否存在 转
一.判断文件夹是否存在: 1.用CreateDirectory(".//FileManege",NULL);如果文件夹FileManege不存在,则创建. 2.或者 ...
- Qt打开外部程序和文件夹需要注意的细节(注意QProcess的空格问题,以及打开本地文件时,需要QUrl::fromLocalFile才可以)
下午写程序中遇到几个小细节,需要在这里记录一下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 QProcess *process = new QProcess(this ...
- Python判断文件和文件夹是否存在的方法
Python判断文件和文件夹是否存在的方法 这篇文章主要介绍了Python判断文件和文件夹是否存在的方法,本文还讲解了判断是否为文件或者目录的方法.os.path.lexist的作用.FTP中判断文件 ...
- 个人永久性免费-Excel催化剂功能第41波-文件文件夹相关函数
对于日常办公过程中,每天面对的操作离不开文件.文件夹的操作,当然可以用资源管理器.Everything之类的管理软件来管理.但涉及到批量操作时,在Excel环境或许是个更好的方式,前面很多的内容中不断 ...
- C#文件或文件夹压缩和解压方法(通过ICSharpCode.SharpZipLib.dll)
我在网上收集一下文件的压缩和解压的方法,是通过ICSharpCode.SharpZipLib.dll 来实现的 一.介绍的目录 第一步:下载压缩和解压的 ICSharpCode.SharpZipLib ...
- R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理
博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. ...
- NSFileManager计算文件/文件夹大小
在一些软件中,一般都会给用户展现当前APP的内存,同时用户可以根据自己的需要来清除缓存的内容.一般而言,文件夹是没有大小这个属性的,所以需要遍历文件夹的内容来计算文件夹的大小,下面用NSFileMan ...
随机推荐
- 【】【】Pocket Cube
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s) ...
- spark cogroup算子
java /** *cogroup与join算子不同的是如果rdd中的一个key,对应多个value,则返回<Iterable<key>,Iterable<value>& ...
- request.getSession().getServletContext().getRealPath()的一些坑
今天是学校机房的服务器上对之前的一个网站升级时发现了一个bug,我自己的机器上用的tomcat8,机房上是tomcat7,结果一运行就开始报找不到文件,最后发现是文件分隔符的问题 原来在代码中涉及到路 ...
- Druid 专题
数据源配置: #datasource #Introductions: https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7 ...
- O'Stolz 定理及其应用
1. 基本形式 对于 ⋆∞(分母为无穷大,分子无要求),设两数列 an,bn,满足: bn 严格单调递增: limn→∞bn=∞ 如果有 limn→∞an+1−anbn+1−bn=L(L 为有限实数) ...
- 禁止Delphi2010检测新版本
启动Delphi2010后,Delphi2010 总会提示下载更新包,而对于D版用户来说,这个功能可能反而带来麻烦,那么有解决办法吗?答案是肯定的.1. 打开 C:\Documents and Set ...
- Android客户端后台发送邮件(JMail)
今天在做项目的时候要处理用户注册问题,里面有个邮箱验证,网上找了一下果然有人做过,但是我拿过来都运行不起来,或者是发送不了邮件.后来我对这个浅浅的研究了一下,贴出来和大家共享. Activity pa ...
- 部署NetCore项目(本文介绍用用IIS部署)
首先要下载安装Core Runtim: 然后在IIS中的模块中就可以看到如下内容: 这时环境就搭好了: 下面按照正常的发布流程走就行了,关键看下面(一定要选择无托管代码)
- python 快速排序 完整
两头开始 以第一个为基准,从有往左,找第一个比基准数 大的,然后交换 从左往右,找第一个比基准数晓得,然后交换 遍历剩下的 基准数 左边的数们 以及 基准数 右边的数们 def quick_so ...
- oracle授权grant
alter any cluster 修改任意簇的权限 alter any index 修改任意索引的权限 alter any role 修改任意角色的权限 alter any sequence 修改任 ...