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。
目录路径可以通过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() 进行检查。
目录路径上有一系列的要素:文件、目录、符号链接。要素的数量通过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()移除目录。
在用entryList()与entryInfoList()获取要素时,可以引入过滤器来筛选符合要求的要素:例如筛选包含某子串的文件、分离文件与目录等:
名字filter通过QStringList传入setNameFilters()进行构建;
属性filter通过多个用OR连接的Filter进行构建,方法是setFilter();
排序顺序由setSorting()传入的一系列用OR(即 | )连接的SortFlags构建。
可以通过match()来检查某个文件名是否符合filter。
有两类static方法用于获取路径,一类返回QDir,一类返回QString:
QDir | QString | Return Value |
current() | currentPath() |
|
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
Path中如果包含元素 ".",说明是当前目录;包含"..",说明是parent目录;包含逻辑链接说明是规范目录,规范目录通过canonicalPath()构建。
通过cleanPath()可以简化path,移除path中多余的"/"与".."。
有时我们需要构造一些自制分隔符的路径,可以用toNativeSeparators()。
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;
}
Header: | #include |
qmake: | QT += core |
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的副本 |
enum | Filter { Dirs, AllDirs, Files, Drives, NoSymLinks, …, CaseSensitive } | 用于entryList() 和entryInfoList()中,描述了筛选选项。 |
flags | Filters | |
enum | SortFlag { Name, Time, Size, Type, Unsorted, …, LocaleAware } | 用于entryList() 和entryInfoList()中的排序,按照 名字、大小、时间 等等排序 |
flags | SortFlags |
返回值类型 | 方法 | 说明 |
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中的"/"分隔符转换系统分隔符,返回转换后的路径 |
页面更新:2024-05-10
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号