QtQDir类
说明
QDir提供了访问 目录 及目录下内容 的类。
QDir既可以用于访问 文件系统 ,也可以用于访问Qt 资源系统 (Qt"s resource system.)。
Qt用 "/" 作为目录分隔符,此外,"/" 也是URL的路径分隔符。
QDir可以指向一个用 相对路径 或绝对路径 指明的文件。绝对路径 在不同系统下不同,Linux系统下,以文件分隔符"/" 开始,如:"/home/user/Documents";在Windows系统下,以某个磁盘开始,如:"C:/Documents and Settings"。相对路径 直接以目录名、文件名 开头,指明一个相对于当前目录的路径 ,如:"images/landscape.png"。
我们可以用 isRelative() 和isAbsolute() 来检查一个QDir是绝对还是相对的。调用makeAbsolute() 可以将一个相对路径的QDir转换为绝对路径的QDir。规范化路径:不含".."、"."、逻辑链接的路径(把这些简写的路径写全),绝对路径与相对路径中都可以含有这些路径。逻辑链接:Linux系统中路径中的local代表根目录,如果根目录为usr,规范化路径中的local就会变成usr。1)导航与目录操作1)导航与目录操作①路径
目录 路径 可以通过path() 获取,通过setPath() 设置新路径,通过absolutePath() 获取到某个目录的绝对路径。
目录名 通过dirName() 获取,不过如果QDir表示的是当前目录 ,那会返回一个 "." :QDir("Documents/Letters/Applications").dirName() // "Applications" QDir().dirName() // "."
目录路径 也可以通过cd()、cdUp() 进行修改,就像在命令行窗口中执行的那些shell命令 。调用cd() 时,如果传入了某个存在的目录路径,那么这个QDir就实际代表了这个目录。而cdUp() 则会改变该QDir到父目录 。这样的话,cd( ".." )就相当于cdUp() 。②添加、删除、修改
目录通过 mkdir() 创造,通过rename() 重命名,通过rmdir() 移除。③检查
通过 exists() 检查某个目录是否存在;目录的属性可以通过 isReadable(), isAbsolute(), isRelative(), 和 isRoot() 进行检查。④重读某目录:refresh()2)文件与目录的内容①路径上的要素
目录路径上有一系列的要素: 文件、目录、符号链接 。要素的数量通过count() 得到,它们的名字通过entryList() 保存在一个QStringList 中,如果我们需要每个要素的信息,可以通过entryInfoList() 来获取一个QList 。②构造路径、移除
通过 filePath()、absoluteFilePath() 构造一个从QDir 指定的目录到某个文件、目录 的绝对路径 与相对路径 。不过它们都不会检查该路径是否存在 ,它们仅仅用于构造路径 :QDir directory("Documents/Letters"); QString path = directory.filePath("contents.txt"); QString absolutePath = directory.absoluteFilePath("contents.txt");
通过 remove() 移除文件 ,通过rmdir() 移除目录 。③filter
在用 entryList() 与entryInfoList() 获取要素时,可以引入过滤器 来筛选符合要求的要素:例如筛选包含某子串的文件、分离文件与目录等:
名字filter 通过QStringList 传入setNameFilters() 进行构建;
属性filter 通过多个用OR 连接的Filter 进行构建,方法是setFilter() ;
排序顺序 由setSorting() 传入的一系列用OR (即 | )连接的SortFlags 构建。
可以通过 match() 来检查某个文件名是否符合filter 。3)当前目录与其他路径
有 两类static 方法用于获取路径 ,一类返回QDir ,一类返回QString :
QDir
QString
Return Value
current()
currentPath()
The application"s working directory
home()
homePath()
The user"s home directory
root()
rootPath()
The root directory
temp()
tempPath()
The system"s temporary directory
可以用setCurrent()来设置程序的 工作目录 。如果我们想知道应用的可执行文件 所在的目录,可以用QCoreApplication::applicationDirPath()。
drives()方法给出了该 文件系统 的所有根目录 构成的List。在Unix系统中,返回一个包含单个"/" 的List,它就是系统根目录。在Windows系统下,它会返回包含系统所有盘的QList 。4)路径操作与字符串
Path中如果包含元素 "." ,说明是当前目录 ;包含".." ,说明是parent目录 ;包含逻辑链接 说明是规范目录 ,规范目录通过canonicalPath() 构建。
通过 cleanPath() 可以简化path,移除path中多余的"/" 与".." 。
有时我们需要构造一些 自制分隔符 的路径,可以用toNativeSeparators() 。5)例子①检查目录是否存在:exists()QDir dir("example"); if (!dir.exists()) qWarning("Cannot find the example directory");
也可以用 QFile:: exists() ②遍历目录、读取文件QDir dir = QDir::root(); // "/" if (!dir.cd("tmp")) { // "/tmp" qWarning("Cannot find the "/tmp" directory"); } else { QFile file(dir.filePath("ex1.txt")); // "/tmp/ex1.txt" if (!file.open(QIODevice::ReadWrite)) qWarning("Cannot create the file %s", file.name()); }
列出当前目录下的所有文件,按文件size从小到大排列: #include #include int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QDir dir; dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks); dir.setSorting(QDir::Size | QDir::Reversed); QFileInfoList list = dir.entryInfoList(); std::cout << " Bytes Filename" << std::endl; for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); std::cout << qPrintable(QString("%1 %2").arg(fileInfo.size(), 10) .arg(fileInfo.fileName())); std::cout << std::endl; } return 0; }1、模块和加载项
Header:
#include
qmake:
QT += core 2、构造
QDir(QString path , QString nameFilter , QDir::SortFlags sort = SortFlags(Name | IgnoreCase), QDir::Filters filters = AllEntries)
用path构造QDir,nameFilter指定过滤的元素
QDir(QString path = QString())
构造QDir指向path,如果path为空,则程序工作目录 "." 会被使用
QDir(QDir dir )
另一个QDir的副本 3、静态字段
enum
Filter { Dirs, AllDirs, Files, Drives, NoSymLinks, …, CaseSensitive }
用于 entryList() 和 entryInfoList()中,描述了筛选选项。
flags
Filters
enum
SortFlag { Name, Time, Size, Type, Unsorted, …, LocaleAware }
用于 entryList() 和 entryInfoList()中的排序,按照 名字、大小、时间 等等排序
flags
SortFlags4、静态方法返回值类型方法说明
void
addSearchPath(QString prefix , QString path )
为path加前缀prefix
QString
cleanPath(QString path )
移除path中冗余的分隔符,"."和".."
QDir
current()
当前目录对应的QDir
QString
currentPath()
当前目录的绝对路径
QFileInfoList
drives()
系统根目录的list
QString
fromNativeSeparators(QString pathName ) 用指定分隔符进行路径分割,默认用"/"
QDir
home()
home目录
QString
homePath()
home目录的路径
bool
isAbsolutePath(QString path )
是否为绝对路径
bool
isRelativePath(QString path )
是否为相对路径
QChar
listSeparator() path分隔符:
Unix下是":"
Windows下是";"
bool match(QString filter , QString fileName )
match(QStringList filters , QString fileName )
检查fileName是否符合filter的规则
QDir
root()
根目录QDir
QString
rootPath()
根目录路径
QStringList
searchPaths(QString prefix )
prefix的检索目录
QChar
separator()
目录分隔符:Unix中是"/";Windows中是""
bool
setCurrent(QString path )
设置当前工作目录
void
setSearchPaths(QString prefix , QStringList searchPaths )
给搜索路径searchPaths加前缀prefix
QDir
temp()
返回系统的临时目录QDir
QString
tempPath()
临时目录路径
QString
toNativeSeparators(QString pathName )
将pathName中的"/"分隔符转换系统分隔符,返回转换后的路径 5、实例方法
邢台出过哪些体育明星?我们现在来看看来自邢台的体育明星都有谁吧!一赵岩昊赵岩昊,1997年10月25日生于河北邢台,中国职业篮球运动员,司职前锋,效力于CBA浙江广厦篮球俱乐部。2013年,赵岩昊随中国
请问小孩在深圳读书明年小学毕业,非深户无房是继续在深圳读好还是回老家读好?回老家读吧,孩子和家长压力都小好多。深圳现在一个家庭一个月没有1。5W日子都过不好了。加上家长上班时间长,陪孩子就是个笑话。晚上到家吃饭730800是正常的时间。孩子写作业到晚上1
用LM1117芯片把12伏电压降到3。3伏可以吗,用什么元件?用LM1117芯片把12V电压降到3。3V可以吗?用什么元件?完全可以利用LM1117将12V电压降到3。3V给需要3。3V电源电压的电子设备。不过对从事电子电路入门的实习大学生,
共享电动车到处都是,为什么盗车贼不敢偷?做啥事都要有经济利益,盗车贼来偷车也是希望有利可图的。那种纯粹为了泄愤破坏毁损车辆的损人不利己的行为,先不讨论。设想一下我偷一台共享电动车回家,我能有什么好处,又要背负什么风险呢?
我的车停着,属于静止状态,被电动车追尾,这个责任我要负吗?看图片,你应该是右拐弯看到有摩托车过来才停车的。那么,根据交法,这个事故你应该负主责,甚至全责。让行原则和借道原则你应该清楚。你应该是右转借非机动车道行驶,而且你车头已进入非机动车
学习外语有哪些特别棒的软件?1。RosettaStone学习英语的软件特别多,我现在用的是RosettaStone,里面有很多语言可以选择,好像有24种语言。先上图以学习英语为例,英语分为初中高三级,初级有2
如何五天一网打尽北京精华景点?那是不可能的事情,天安门周围你都转不完!故宫中南海,中山公园,劳动人民文化宫前门,北海银锭桥因为我所在的城市距离北京很近,所以我也去过北京很多次了,那里著名的或非著的景点几乎玩了个
你去过哪些照骗景点?呵呵必须有我这个问题相信想要去巴厘岛的都知道离乌布蛮远的一个景点吧。天空之门呵呵看到网上图片是这样的前三张)实际到了是这样的没有湖水实际操作是摄影师用镜子放在你的镜头底下就是这样了
重庆解放碑和成都春熙路哪个繁华?哪里比较好玩?为什么?感谢邀请!作为一名地道的重庆人,以及在成都生活近5年的我来说,简单的说说我个人的看法。重庆解放碑步行街以及成都春熙路步行街到底谁是第一商圈呢?首先,解放碑作为重庆的招牌,这一点春熙
陇南有哪些不错的景点?感谢邀请。陇南旅游资源独特!不光山奇水秀,文化灿烂,而且历史悠久,华夏人文始祖伏羲和秦始皇先祖都生长在这片土地上。陇南比较著名的人文景区景点有成县杜甫草堂礼县先秦文化遗址祁山三国古
哪个省份在综合实力上,堪称中国第一省份?根据是什么?1山东子弟兵为主的三野四野横扫全国,三万山东南下干部进浙江,奔福建,闯广东2北大荒开发是六万山东支边青年加上六万铁道兵拉开序幕3新疆建设兵团建设,三万山东女青年上天山4福建林场建设