QtQDir类
说明
QDir提供了访问目录及目录下内容的类。
QDir既可以用于访问文件系统,也可以用于访问Qt资源系统(Qtsresourcesystem。)。
Qt用作为目录分隔符,此外,也是URL的路径分隔符。
QDir可以指向一个用相对路径或绝对路径指明的文件。绝对路径在不同系统下不同,Linux系统下,以文件分隔符开始,如:homeuserDocuments;在Windows系统下,以某个磁盘开始,如:C:DocumentsandSettings。相对路径直接以目录名、文件名开头,指明一个相对于当前目录的路径,如:imageslandscape。png。
我们可以用isRelative()和isAbsolute()来检查一个QDir是绝对还是相对的。调用makeAbsolute()可以将一个相对路径的QDir转换为绝对路径的QDir。规范化路径:不含。。、。、逻辑链接的路径(把这些简写的路径写全),绝对路径与相对路径中都可以含有这些路径。逻辑链接:Linux系统中路径中的local代表根目录,如果根目录为usr,规范化路径中的local就会变成usr。1)导航与目录操作1)导航与目录操作路径
目录路径可以通过path()获取,通过setPath()设置新路径,通过absolutePath()获取到某个目录的绝对路径。
目录名通过dirName()获取,不过如果QDir表示的是当前目录,那会返回一个。:QDir(DocumentsLettersApplications)。dirName()ApplicationsQDir()。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指定的目录到某个文件、目录的绝对路径与相对路径。不过它们都不会检查该路径是否存在,它们仅仅用于构造路径:QDirdirectory(DocumentsLetters);QStringpathdirectory。filePath(contents。txt);QStringabsolutePathdirectory。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
ReturnValue
current()
currentPath()
Theapplicationsworkingdirectory
home()
homePath()
Theusershomedirectory
root()
rootPath()
Therootdirectory
temp()
tempPath()
Thesystemstemporarydirectory
可以用setCurrent()来设置程序的工作目录。如果我们想知道应用的可执行文件所在的目录,可以用QCoreApplication::applicationDirPath()。
drives()方法给出了该文件系统的所有根目录构成的List。在Unix系统中,返回一个包含单个的List,它就是系统根目录。在Windows系统下,它会返回包含系统所有盘的QList。4)路径操作与字符串
Path中如果包含元素。,说明是当前目录;包含。。,说明是parent目录;包含逻辑链接说明是规范目录,规范目录通过canonicalPath()构建。
通过cleanPath()可以简化path,移除path中多余的与。。。
有时我们需要构造一些自制分隔符的路径,可以用toNativeSeparators()。5)例子检查目录是否存在:exists()QDirdir(example);if(!dir。exists())qWarning(Cannotfindtheexampledirectory);
也可以用QFile::exists()遍历目录、读取文件QDirdirQDir::root();if(!dir。cd(tmp)){tmpqWarning(Cannotfindthetmpdirectory);}else{QFilefile(dir。filePath(ex1。txt));tmpex1。txtif(!file。open(QIODevice::ReadWrite))qWarning(Cannotcreatethefiles,file。name());}
列出当前目录下的所有文件,按文件size从小到大排列:includeQDirincludeiostreamintmain(intargc,charargv〔〕){QCoreApplicationapp(argc,argv);QDirdir;dir。setFilter(QDir::FilesQDir::HiddenQDir::NoSymLinks);dir。setSorting(QDir::SizeQDir::Reversed);QFileInfoListlistdir。entryInfoList();std::coutBytesFilenamestd::endl;for(inti0;ilist。size();i){QFileInfofileInfolist。at(i);std::coutqPrintable(QString(12)。arg(fileInfo。size(),10)。arg(fileInfo。fileName()));std::coutstd::endl;}return0;}1、模块和加载项
Header:
include
qmake:
QTcore2、构造
QDir(QStringpath,QStringnameFilter,QDir::SortFlagssortSortFlags(NameIgnoreCase),QDir::FiltersfiltersAllEntries)
用path构造QDir,nameFilter指定过滤的元素
QDir(QStringpathQString())
构造QDir指向path,如果path为空,则程序工作目录。会被使用
QDir(QDirdir)
另一个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(QStringprefix,QStringpath)
为path加前缀prefix
QString
cleanPath(QStringpath)
移除path中冗余的分隔符,。和。。
QDir
current()
当前目录对应的QDir
QString
currentPath()
当前目录的绝对路径
QFileInfoList
drives()
系统根目录的list
QString
fromNativeSeparators(QStringpathName)用指定分隔符进行路径分割,默认用
QDir
home()
home目录
QString
homePath()
home目录的路径
bool
isAbsolutePath(QStringpath)
是否为绝对路径
bool
isRelativePath(QStringpath)
是否为相对路径
QChar
listSeparator()path分隔符:
Unix下是:
Windows下是;
boolmatch(QStringfilter,QStringfileName)
match(QStringListfilters,QStringfileName)
检查fileName是否符合filter的规则
QDir
root()
根目录QDir
QString
rootPath()
根目录路径
QStringList
searchPaths(QStringprefix)
prefix的检索目录
QChar
separator()
目录分隔符:Unix中是;Windows中是
bool
setCurrent(QStringpath)
设置当前工作目录
void
setSearchPaths(QStringprefix,QStringListsearchPaths)
给搜索路径searchPaths加前缀prefix
QDir
temp()
返回系统的临时目录QDir
QString
tempPath()
临时目录路径
QString
toNativeSeparators(QStringpathName)
将pathName中的分隔符转换系统分隔符,返回转换后的路径5、实例方法