赞
踩
QDir dir("example");
//也可以直接使用静态函数 QFile::exists()
if (!dir.exists())
qWarning("Cannot find the example directory");
QDir dir = QDir::root(); // 路径为"/"
if (!dir.cd("tmp")) // 进入"/tmp"路径
{
qWarning("Cannot find the \"/tmp\" directory");
}
else
{
QFile file(dir.filePath("ex1.txt")); // file的路径为"/tmp/ex1.txt"
if (!file.open(QIODevice::ReadWrite)) //以可读可写方式打开文件
qWarning("Cannot create the file %s", file.name());
}
QDateTime timeCurrent = QDateTime::currentDateTime(); //获取系统时间
QString time_day = timeCurrent.toString("20yyMMdd"); //日期转换为Qstring
QString time_hour = timeCurrent.toString("hhmmss"); //时间转换为Qstring
QString path_dir = QString("../0.results/%1/%3_%1_%2.csv").arg(time_day).arg(time_hour).arg(fileName); //根据时间设置保存路径
QDir dir(path_dir); //使用路径创建QDir对象
if(!dir.exists()) //判断文件夹是否存在,不存在则创建
{
qDebug() << "no such dir";
if(dir.mkpath(dir.absolutePath()))
{
qDebug() << "creat dir success:" << dir.absolutePath();
}
else
{
qDebug() << "creat dir failed" << dir.absolutePath();
}
}
在遍历文件时,可以对过滤器进行设置,用来赛选需要的文件,对于entryList()
和entryInfoList()
。通过使用按位OR运算符组合以下列表中的值来指定过滤器值:
内容 | 值 | 描述 |
---|---|---|
QDir::Dirs | 0x001 | 列出与筛选器匹配的目录 |
QDir::AllDirs | 0x400 | 列出所有目录 |
QDir::Files | 0x002 | 列出文件 |
QDir::Drives | 0x004 | 列出磁盘驱动器(在Unix下忽略) |
QDir::NoSymLinks | 0x008 | 不要列出符号链接(被不支持符号链接的操作系统忽略) |
QDir::NoDotAndDotDot | NoDot | NoDotDot | 不要列出特殊条目".“和”…" |
QDir::NoDot | 0x2000 | 不要列出特殊条目"." |
QDir::NoDotDot | 0x4000 | 不要列出特殊条目"…" |
QDir::AllEntries | Dirs | Files | Drives | 列出目录、文件、驱动器和符号链接(除非指定系统,否则不会列出损坏的符号链接) |
QDir::Readable | 0x010 | 列出应用程序具有读取权限的文件。Readable值需要与Dirs或Files组合 |
QDir::Writable | 0x020 | 列出应用程序具有写入权限的文件。可写值需要与Dirs或Files组合 |
QDir::Executable | 0x040 | 列出应用程序具有执行权限的文件。Executable值需要与Dirs或Files组合 |
QDir::Modified | 0x080 | 仅列出已修改的文件(在Unix上忽略) |
QDir::Hidden | 0x100 | 列出隐藏文件(在Unix上,以“.”开头的文件) |
QDir::System | 0x200 | 列出系统文件(在Unix上,包括FIFO、套接字和设备文件;在Windows上,包括.lnk 文件) |
QDir::CaseSensitive | 0x800 | 过滤器应区分大小写 |
还可以通过设置QDir::SortFlag
对获取到的文件信息进行排序,排序值是通过对以下列表中的值进行“或”运算来指定的:
内容 | 值 | 描述 |
---|---|---|
QDir::Name | 0x00 | 按名称排序 |
QDir::Time | 0x01 | 按时间排序(修改时间) |
QDir::Size | 0x02 | 按文件大小排序 |
QDir::Type | 0x80 | 按文件的扩展名进行排序 |
QDir::Unsorted | 0x03 | 不进行排序 |
QDir::NoSort | -1 | 默认情况下不排序 |
QDir::DirsFirst | 0x04 | 首先放目录,然后放文件 |
QDir::DirsLast | 0x20 | 先放文件,然后放目录 |
QDir::Reversed | 0x08 | 颠倒排序顺序 |
QDir::IgnoreCase | 0x10 | 不区分大小写排序 |
QDir::LocaleAware | 0x40 | 使用当前区域设置对项目进行适当排序 |
示例:列出当前目录中的所有文件(不包括符号链接),按大小排序,最小优先:
#include <QDir>
#include <iostream>
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;
}
QDir用于操作路径名、访问有关路径和文件的信息以及操作底层文件系统。它也可用于访问Qt的资源系统。
Qt使用“/”作为通用目录分隔符,其方式与URL中的“/”用作路径分隔符相同。如果始终使用“/”作为目录分隔符,Qt会转换路径以符合底层操作系统。
QDir可以使用相对路径或绝对路径指向文件。绝对路径以目录分隔符开头(在Windows下,可以选择前面加驱动器规范)。相对文件名以目录名或文件名开头,并指定相对于当前目录的路径。
//绝对路径示例
QDir("/home/user/Documents")
QDir("C:/Users")
//相对路径示例
QDir("images/landscape.png")
isRelative()
或isAbsolute()
函数来检查QDir是使用相对还是绝对文件路径。makeAbsolute()
将相对QDir转换为绝对QDir。可以使用path()
函数获取目录的路径,并使用setPath()
函数设置新路径。通过调用absolutePath()
可以找到目录的绝对路径。使用dirName()
函数可以找到目录的名称。这通常返回绝对路径中指定目录位置的最后一个元素。但是,如果QDir表示当前目录,它也可以返回“.”
cd()
和cdUp()
函数来更改,这两个函数的操作方式都类似于shell命令。当用现有目录的名称调用cd()
时,QDir对象会更改目录,从而表示该目录。cdUp()
函数更改QDir对象的目录,使其引用其父目录;即cd(“…”)等同于cdUp()。mkdir()
创建,用rename()
重命名,用rmdir()
删除。exists()
测试具有给定名称的目录是否存在,并且可以使用isReadable()
、isAbsolute()
、isRelative()
和isRoot()
来测试目录的属性。refresh()
函数从磁盘重新读取目录的数据 QDir("Documents/Letters/Applications").dirName() // 返回"Applications"
QDir().dirName() // 返回"."
目录包含许多条目,表示文件、目录和符号链接。
count()
返回目录中的条目数。entryList()
获取目录中所有条目名称的字符串列表。如果需要每个条目的信息,请使用entryInfoList()
获取QFileInfo对象的列表。filePath()
和absoluteFilePath()
构造目录中文件和目录的路径。filePath()
函数返回相对于QDir对象路径的指定文件或目录的路径;absoluteFilePath()
返回指定文件或目录的绝对路径。这些函数都不检查文件或目录的存在;它们只构建路径。remove()
函数删除文件。目录不能以与文件相同的方式删除;改用rmdir()
删除它们。entryList()
和entryInfoList()
函数返回的条目数量。可以应用名称过滤器来指定文件名需要匹配的通配符模式,选择条目属性并可以区分文件和目录的属性过滤器,以及排序顺序。名称筛选器是传递给setNameFilters()
的字符串列表。属性过滤器由过滤器的按位OR组合组成,这些过滤器在调用setFilter()
时指定。排序顺序是使用setSorting()
和SortFlags
的按位OR组合指定的。match()
函数测试文件名是否与筛选器匹配。在调用entryList()
和entryInfoList()
时,也可以指定过滤器和排序顺序标志,以覆盖先前定义的行为。 QDir directory("Documents/Letters");
QString path = directory.filePath("contents.txt");
QString absolutePath = directory.absoluteFilePath("contents.txt");
通过QDir对象的静态函数可以访问一些公共目录。也有相应的函数返回字符串:
QDir | QString | 返回对象 |
---|---|---|
current() | currentPath() | 应用程序的工作目录 |
home() | homePath() | 用户主目录 |
root() | rootPath() | 系统根目录 |
temp() | tempPath() | 系统暂时目录 |
setCurrent()
静态函数也可用于设置应用程序的工作目录。QCoreApplication::applicationDirPath()
。drives()
静态函数为包含文件系统的每个设备提供根目录列表。在Unix系统上,这将返回一个包含单个根目录“/”的列表;在Windows上,根据用户系统的配置,列表通常会包含C:/,以及可能的其他驱动器字母,如D:/。包含引用路径中当前目录的“.”元素、引用父目录的“…”元素和符号链接的路径可以使用canonicalPath()
函数简化为规范形式。
还可以通过使用cleanPath()
删除冗余的“/”和“…”元素来简化路径。
QString bin = "/local/bin"; // 其中/local/bin是指向/usr/bin的符号链接
QDir binDir(bin);
QString canonicalBin = binDir.canonicalPath(); // canonicalBin现在等于“/usr/bin”
QString ls = "/local/bin/ls"; // 其中ls是可执行文件“ls”
QDir lsDir(ls);
QString canonicalLs = lsDir.canonicalPath(); //canonicalLS现在等于“/usr/bin/ls”。
有时需要能够在用户平台的本地表示中显示路径。静态toNativeSeparators()
函数返回指定路径的副本,其中每个目录分隔符都由底层操作系统的适当分隔符替换。
返回值 | 函数 | 说明 |
---|---|---|
QDir(const std::filesystem::path &path, const QString &nameFilter, QDir::SortFlags sort = SortFlags(Name | IgnoreCase), QDir::Filters filters = AllEntries) | |
QDir(const std::filesystem::path &path) | 构造函数 | |
QDir(const QString &path, const QString &nameFilter, QDir::SortFlags sort = SortFlags(Name | IgnoreCase), QDir::Filters filters = AllEntries) | |
QDir(const QString &path = QString()) | 构造函数 | |
QDir(const QDir &dir) | 构造函数 | |
QString | absoluteFilePath(const QString &fileName) const | 返回目录中文件的绝对路径名。不检查文件是否实际存在于目录中;不会删除fileName中的冗余多个分隔符或".“和”…"目录 |
QString | absolutePath() const | 返回绝对路径(以“/”或驱动器规范开头的路径),该路径可能包含符号链接,但绝不包含冗余的".“、”…"或多个分隔符。 |
QString | canonicalPath() const | 返回规范路径,即没有符号链接或冗余".“或”…"元素的路径 |
bool | cd(const QString &dirName) | 将QDir的目录更改为dirName |
bool | cdUp() | 通过从QDir的当前目录上移一个目录来更改目录 |
uint | count() const | 返回目录中目录和文件的总数 |
QString | dirName() const | 返回目录的名称 |
QFileInfoList | entryInfoList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const | 返回目录中所有文件和目录的QFileInfo对象列表,根据之前使用setNameFilters()和setFilter()设置的名称和属性筛选器排序,并根据使用 setSorting()设置设置的标志排序 |
QFileInfoList | entryInfoList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const | 上一个函数的重载函数 |
QStringList | entryList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const | 返回目录中所有文件和目录的名称列表,根据之前使用setNameFilters()和setFilter()设置的名称和属性筛选器排序,并根据使用 setSorting()设置设置的标志排序 |
QStringList | entryList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const | 上一个函数的重载函数 |
bool | exists(const QString &name) const | 如果名为name的文件存在,则返回true;否则返回false |
bool | exists() const | 上一个函数的重载函数 |
QString | filePath(const QString &fileName) const | 返回目录中文件的路径名。不检查文件是否实际存在于目录中。如果QDir是相对的,则返回的路径名也将是相对的。不会删除fileName中的冗余多个分隔符或".“和”…"目录 |
std::filesystem::path | filesystemAbsolutePath() const | 将absolutePath()返回为std::filesystem::path |
std::filesystem::path | filesystemCanonicalPath() const | 将canonicalPath()返回为std::filesystem::path |
std::filesystem::path | filesystemPath() const | 将path()返回为std::filesystem::path |
QDir::Filters | filter() const | 返回setFilter()设置的值 |
bool | isAbsolute() const | 如果目录的路径是绝对路径,则返回true;否则返回false |
bool | isEmpty(QDir::Filters filters = Filters(AllEntries | NoDotAndDotDot)) const |
bool | isReadable() const | 如果目录可读并且我们可以按名称打开文件,则返回true;否则返回false |
bool | isRelative() const | 如果目录路径是相对的,则返回true;否则返回false。(在Unix下,如果路径不以"/"开头,则路径是相对的) |
bool | isRoot() const | 如果目录是根目录,则返回true;否则返回false |
bool | makeAbsolute() | 将目录路径转换为绝对路径。如果它已经是绝对的,什么都不会发生。如果转换成功,则返回true;否则返回false |
bool | mkdir(const QString &dirName) const | 创建名为dirName的子目录,成功时返回true;否则返回false。如果调用此函数时目录已存在,则返回false |
bool | mkpath(const QString &dirPath) const | 创建目录路径dirPath。该函数将创建创建目录所需的所有父目录。如果成功,则返回true;否则返回false。如果调用此函数时路径已存在,则返回true |
QStringList | nameFilters() const | 返回 setNameFilters()设置的字符串列表 |
QString | path() const | 返回路径。这可能包含符号链接,但绝不包含多余的".“、”…"或多个分隔符 |
void | refresh() const | 刷新目录信息 |
QString | relativeFilePath(const QString &fileName) const | 返回相对于目录的fileName路径 |
bool | remove(const QString &fileName) | 删除文件fileName |
bool | removeRecursively() | 删除目录,包括其所有内容 |
bool | rename(const QString &oldName, const QString &newName) | 将文件或目录从oldName重命名为newName,如果成功则返回true;否则返回false |
bool | rmdir(const QString &dirName) const | 删除dirName指定的目录,目录必须为空,rmdir()才能成功 |
bool | rmpath(const QString &dirPath) const | 删除目录路径dirPath,该函数将删除dirPath中的所有父目录,前提是它们为空。这与mkpath(dirPath)相反。 |
void | setFilter(QDir::Filters filters) | 将 entryList()和 entryInfoList()使用的筛选器设置为筛选器。过滤器用于指定entryList()和entryInfoList()应返回的文件类型。 |
void | setNameFilters(const QStringList &nameFilters) | 将 entryList()和 entryInfoList()使用的名称筛选器设置为nameFilters指定的筛选器列表。 |
void | setPath(const QString &path) | 将目录的路径设置为路径。清除路径中的冗余".“、”…"和多个分隔符。不检查具有此路径的目录是否实际存在; |
void | setPath(const std::filesystem::path &path) | 上一个函数的重载函数 |
void | setSorting(QDir::SortFlags sort) | 设置entryList()和 entryInfoList()使用的排序顺序 |
QDir::SortFlags | sorting() const | 返回 setSorting()设置的值 |
void | swap(QDir &other) | 将此QDir实例与其他实例交换 |
返回值 | 函数原型 | 说明 |
---|---|---|
void | addSearchPath(const QString &prefix, const QString &path) | 将路径添加到前缀的搜索路径 |
void | addSearchPath(const QString &prefix, const std::filesystem::path &path) | 将路径添加到前缀的搜索路径 |
QString | cleanPath(const QString &path) | 返回标准化目录分隔符(即,平台本机分隔符转换为"/“)并删除冗余分隔符的路径,并尽可能解析”.“s和”…"s |
QDir | current() | 返回应用程序的当前目录 |
QString | currentPath() | 返回应用程序当前目录的绝对路径。当前目录是用QDir::setCurrent()设置的最后一个目录,如果从未调用过,则是父进程启动此应用程序的目录 |
QFileInfoList | drives() | 返回此系统上根目录的列表 |
QString | fromNativeSeparators(const QString &pathName) | 使用"/“作为文件分隔符返回pathName。例如,在Windows上,fromNativeSeparators(“c:\winnt\system32”)返回"c:\winnt/system32” |
QDir | home() | 返回用户的主目录 |
QString | homePath() | 返回用户主目录的绝对路径 |
bool | isAbsolutePath(const QString &path) | 如果路径是绝对路径,则返回true;如果是相对的,则返回false |
bool | isRelativePath(const QString &path) | 如果路径是相对的,则返回true;如果是绝对值,则返回false |
QChar | listSeparator() | 返回本机路径列表分隔符:Unix下的":“和Windows下”;" |
bool | match(const QString &filter, const QString &fileName) | 如果fileName与通配符(glob)模式筛选器匹配,则返回true;否则返回false。过滤器可以包含由空格或分号分隔的多个模式。匹配不区分大小写 |
bool | match(const QStringList &filters, const QString &fileName) | 上面函数的重载函数 |
QDir | root() | 返回根目录 |
QString | rootPath() | 返回根目录的绝对路径,对于Unix操作系统,返回"/“。对于Windows文件系统,通常返回"c:/” |
QStringList | searchPaths(const QString &prefix) | 返回前缀的搜索路径 |
QChar | separator() | 返回本机目录分隔符:Unix下为"/“,Windows下为”" |
bool | setCurrent(const QString &path) | 将应用程序的当前工作目录设置为路径。如果目录已成功更改,则返回true;否则返回false。 |
void | setSearchPaths(const QString &prefix, const QStringList &searchPaths) | 使用searchPaths的前缀前缀设置或替换Qt的文件名搜索路径 |
QDir | temp() | 返回系统的临时目录 |
QString | tempPath() | 返回系统临时目录的绝对规范路径 |
QString | toNativeSeparators(const QString &pathName) | 返回pathName,其中"/“分隔符转换为适用于基础操作系统的分隔符。 在Windows上,to NativeSeparators(“c:\winnt/system32”)返回"c:\wint\system32” |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。