Qt提供了一套操作本地目录以及文件的类,是的开发者可以在不了解系统api的情况下来操作系统本地的目录以及文件,这对于开发者来说是一件很让人欣慰的事情,对于一名开发这来说学习一个系统的api是一项浩大的工程,无论是windows还是linux或者unix或者其他什么系统,这些系统的api往往数量庞大,需要花费大量的时间去学习研究,而Qt则可以让我们省去很多的时间,我们甚至可以在完全不知道系统api的情况下操作系统的目录文件

  FBIwarning:本章代码可能会删除你本地文件,请谨慎使用!!!

首先看下QDir这个类,这个类提供了大量的用于操作目录的成员函数,大多数函数像cd(),cdUp(),mkdir(),rename(),remove()等可以通过函数名就了解他们的用途,下面是一个显示某个文件目录下子目录名的函数

void ShowFileName::showName(const QString& parentDir)
{QDir dirs(parentDir);dirs.setFilter(QDir::Dirs|QDir::NoDotAndDotDot);  //注释1int cs = dirs.count();  //注释2qDebug()<<cs;for(int i = 0 ; i < cs ; ++i)  //注释3qDebug()<<dirs[i];
}

注释1:对于一个目录下,可能包含文件,子目录等等,而这个代码只需要我们显示子目录,所以设置一个过滤器,需要注意的是QDir::NoDotAndDotDot这个枚举值,这个枚举值表示不包括“."和".."这两个目录,无论windows还是linux系统,在默认情况下都会包含在目录里。

注释2 QDir函数提供了count()来用于计算目录下包含的文件数目,对于windows来说,这包括了所有子目录,图片,文本文件等所有东西,对于linux下来说,”一切皆文件“,这里得到的就是该目录下所有的文件数量。在上面的代码中,由于设了过滤器,所以count()得到的是该目录下所有子目录(不包括“."和"..")的数量

注释3 QDir类重载了[]操作符,该操作符返回的是得到的文件名,这里可以把QDir类看成一个包含所有文件名的List,需要注意的是这里返回的(QString)是相对路径,假如/home/vimer目录下包含两个子目录,/home/vimer/pix和/home/vimer/myExe,那执行函数

showName(tr("/home/vimer/"));

输出结果是

"pix"

"myExe"

QDir类还提供了大量的静态函数以方便开发,QDir::Drives()函数用于返回系统的根目录,在windows系统下,返回"C:/","D:/",等所有盘符,这包括了移动影片,U盘的盘符,而在linux下,该函数只返回根目录"/";这个函数的返回值是QFileInfoList,这是一个QList<QFileInfo>的别名,下面代码可以列出windows系统的所有盘符

QFileInfoList myRoots = QDir::Drives();
for(auto A : myRoots)qDebug()<<A.path();

而在linux这段代码只返回一个"/";关于QFileInfo类稍后详述。

QDir类有个静态函数需要注意下,QDir::currentPath(),该函数返回是程序的工作目录,这里需要区别下程序的工作目录和程序所在目录(特别实在linux下),假设程序躺着/home/vimer/myExe/ShowDirName目录下,该程序的绝对路径文件为

/home/vimer/myExe/ShowDirName/showDirName;

那首先执行命令

vimer@vimer-desktop:~$ cd /home/vimer/myExe/ShowDirName

vimer@vimer-desktop:~$ showDirName

执行这个文件时QDir::currentPath();返回的值为/home/vimer/myExe/ShowDirName;这没什么问题,但如果在别的目录执行该程序,执行过程如下

vimer@vimer-desktop:~$ cd /home/vimer/Game/war3

vimer@vimer-desktop:~$ /home/vimer/myExe/ShowDirName/showDirName

这个时候QDir::currentPath();的返回值变成了/home/vimer/Game/war3,从这里可以看出该静态函数返回的当前目录是指当前的工作目录,而不是程序所在的目录,如果需要程序所在的目录,需要调用

QCoreApplication::applicationDirPath()

对于系统本地文件,Qt提供了QFile和QFileInfo类来操作本地文件,其中QFile主要用于文件的I/O,这里主要介绍下QFileInfo.QFileInfo同样提供了大量的成员函数用于获取文件的属性,isDir()函数可以判断是否为目录,path()函数返回文件的路径,大多数函数可以通过他们的名字就了解他们的用途,当然保险起见,还是建议阅读文档了解函数的准确用途后再使用,造作本地文件是需要格外小心。。。。。QFileInfo类还提供了一些本地相关性的函数,例如linux下文件有所有者,用户组,其他用户三个属性,每个都会有一个1,2,4属性(ps:相信linuxer对这几个数字很熟悉),而windows下的文件则没有用户组这个概念,QFileInfo提供了成员函数group()来返回用户组的名称,而该函数在windows下调用,则会返回一个空的QString.

有一个需要注意的地方是windows下的文件名,对于一个window下的目录或者文件名,可能会这样写"D:\Game\war3";但在Qt编程的时候需要使用这个目录时,需要写成

QDir myDirs(tr("D:/Game/war"));

这里需要把"\"换成"/",当然也可以通过转义来解决这个问题

Essential Qt 第二十一章 本地目录相关推荐

  1. 鸟哥的Linux私房菜(服务器)- 第二十一章、文件服务器之三: FTP 服务器

    第二十一章.文件服务器之三: FTP 服务器 最近更新日期:2011/08/08 FTP (File Transfer Protocol) 可说是最古老的协议之一了,主要是用来进行档案的传输,尤其是大 ...

  2. 数字图像处理:第二十一章 视频压缩标准

    第二十一章视频压缩标准 目录 引言 H.261标准 MPEG-1标准 MPEG-2标准 MPEG-4标准 MPEG-7标准 作业 1. 引言 视频压缩标准是多媒体领域中的重要内容,针对视频会议.网络通 ...

  3. 鸟哥的Linux私房菜(基础篇)- 第二十一章、系统配置工具(网络与打印机)与硬件侦测

    第二十一章.系统配置工具(网络与打印机)与硬件侦测 最近升级日期:2009/09/15 除了手动配置之外,其实系统提供了一个名为 setup 的命令给系统管理员使用喔!这个命令还能够配置网络呢.此外, ...

  4. 《统计学习方法》学习笔记 第二十一章 PageRank算法

    目录 1 PageRank的定义 1.1 基本想法 1.2 有向图和随机游走模型 1 有向图(directed graph) 2 随机游走模型 3 PageRank的基本定义 4 PageRank的一 ...

  5. 【正点原子MP157连载】第二十一章 嵌入式Linux LED驱动开发实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  6. 第二十一章 SQL命令 CREATE TRIGGER(一)

    文章目录 第二十一章 SQL命令 CREATE TRIGGER(一) 大纲 参数 描述 权限和锁 定义触发器的其他方式 参数 trigname event ORDER REFERENCING acti ...

  7. C++程序设计原理与实践 习题答案 第二十一章 第21章习题答案

    第二十一章:图形用户界面 习题答案 习题要求所设计的函数类和数据图类 My_window.h My_window.cpp main.cpp 21.1 21.2 21.3 21.4 21.5 21.6 ...

  8. 【Linux命令】《鸟哥Linux基础》第二十一章 软件安装:源代码与Tarball

    第二十一章 软件安装:源代码与Tarball 了解:如何将开放源码的程序设计.加入函数库的原理.通过编译而成为可执行的二进制程序,最后该文件可被我们所使用的一连串过程. 这一章介绍最原始的软件管理方式 ...

  9. 计算机网络离不开光缆,九年级物理全册 第二十一章 第四节 越来越宽的信息之路习题课件 新人教版.ppt...

    九年级物理全册 第二十一章 第四节 越来越宽的信息之路习题课件 新人教版.ppt 第二十一章信息的传递,第四节越来越宽的信息之路,1微波的性质更接近光波,大致沿_______传播,需要每隔_____k ...

  10. 羊皮卷的实践-第二十一章

    第二十一章 高山滑雪是人与环境以及时间的竞赛.每当我看到输赢之间只差极短的时间时,我就不禁摇头同情那些输家. 第一名的时间是一分三十七秒二二. 第二名的时间是一分二十七秒二五. 也就是说,冠军与平庸之 ...

最新文章

  1. idea上实现github代码同步
  2. python输出去空格_Python3基础 print(,end=) 输出内容的末尾加入空格
  3. 波司登在“寒潮”下再创新高,羽绒服行业真的靠天吃饭?
  4. nginx负载均衡配置的几种策略
  5. Docker默认网络管理
  6. Spring MVC会话教程
  7. 三问(why?what?how?)金融领域的机器学习
  8. pl/sql 设置编码
  9. 名企面试官精讲典型编程题之C#篇
  10. Java语言中String累的总结
  11. [2018.10.20 T1] 蛋糕
  12. centos7安装python2.6_centos7.2下yum和python重装问题及解决方法
  13. 苹果 ios mdm服务器搭建
  14. 每个程序员都应该了解的内存知识(2)-CPU caches
  15. It Was a Good Barn
  16. mysql_图形界面工具
  17. 区块链开发(十四)以太坊go-ethereum客户端查询交易列表探讨
  18. pyepics --Auto-saving: simple save/restore PVs
  19. 五款堪称神器的网页翻译插件,不知道就亏大了!
  20. 判断并求出两个圆的交点(平面几何)

热门文章

  1. 客户要管理,就靠crm吗?
  2. java 调用odi_[转]ODI定时任务
  3. Beta的计划和人员的变动
  4. win7设置文件夹共享 win7共享文件夹
  5. 130个实用网站集合
  6. find函数的使用方法Matlab,matlab中find函数的使用说明——emily语法介绍
  7. php 生成pdf 中文,用PHP创建PDF中文文档
  8. python idle解释器的命令提示符是_Python IDLE使用
  9. 南邮 OJ 2029 节奏大师
  10. Unity 自定义Package