Qt:QDir 以你之姓@ 2022-11-18 10:56 217阅读 0赞 QDir类提供对目录结构及其内容的访问 > 头文件: > > #include<QDir> > > cmake: > > find_package(Qt6 COMPONENTS Core REQUIRED) > target_link_libraries(mytarget PRIVATE Qt6::Core) > > qmake: > > QT += core # 详细说明 # QDir用于操作路径名、访问有关路径和文件的信息以及操作底层文件系统。它也可以用来访问Qt的[资源系统][Link 1]。 Qt使用“/”作为通用目录分隔符,就像在url中使用“/”作为路径分隔符一样。如果您总是使用“/”作为目录分隔符,Qt将转换您的路径以符合底层操作系统。 QDir可以使用相对路径或绝对路径指向文件。绝对路径以目录分隔符开始(在Windows下,可以在前面加上驱动器规范)。相对文件名以目录名或文件名开头,并指定相对于当前目录的路径。 绝对路径的例子: QDir("/home/user/Documents") QDir("C:/Documents and Settings") 在Windows上,上面的第二个例子在用于访问文件时将被翻译成C:\\Documents and Settings。 相对路径的例子: QDir("images/landscape.png") 径。调用makeAbsolute()将相对QDir转换为绝对QDir。 注意:以冒号(:)开头的路径总是被认为是绝对的,因为它们表示QResource。 ## 导航和目录操作 ## 一个目录的路径可以通过`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()`函数的作用是:重新从磁盘读取目录的数据。 ## 文件和目录内容 ## 目录包含许多条目,表示文件、目录和符号链接。目录中的条目数由`count()`返回。可以使用`entryList()`获取目录中所有条目的字符串列表。如果需要每个条目的信息,可以使用`entryInfoList()`来获得QFileInfo对象列表。 目录中文件和目录的路径可以使用filePath()和absoluteFilePath()来构造。 * `filePath()`函数的作用是:返回到指定文件或目录的相对于QDir对象路径的路径; * `absoluteFilePath()`返回指定文件或目录的绝对路径。 这两个函数都不会检查文件或目录是否存在;它们只构造路径。 QDir directory("Documents/Letters"); QString path = directory.filePath("contents.txt"); QString absolutePath = directory.absoluteFilePath("contents.txt"); 可以使用remove()函数删除文件,使用rmdir()来删除目录。 通过将过滤器应用于QDir对象,可以减少entryList()和entryInfoList()返回的条目数量。您可以应用名称筛选器来指定带有文件名需要匹配的通配符的模式、选择条目属性并能够区分文件和目录的属性筛选器以及排序顺序。 名称过滤器是传递给`setnamfilters()`的字符串列表。属性过滤器由按位或组合的过滤器组成,它们在调用setFilter()时指定。排序顺序使用setsorted()和SortFlags的按位或组合来指定。 您可以使用match()函数测试文件名是否与过滤器匹配。 在调用entryList()和entryInfoList()时,也可以指定筛选器和排序顺序标志, 以覆盖先前定义的行为 ## 当前目录和其他特殊路径 ## 通过返回QDir对象的一些静态函数提供了对一些常见目录的访问。也有对应的返回字符串的函数: <table> <thead> <tr> <th>QDir</th> <th>QString</th> <th>返回值</th> </tr> </thead> <tbody> <tr> <td>current()</td> <td>currentPath()</td> <td>应用程序的工作目录</td> </tr> <tr> <td>home()</td> <td>homePath()</td> <td>用户的主目录</td> </tr> <tr> <td>root()</td> <td>rootPath()</td> <td>根目录</td> </tr> <tr> <td>temp()</td> <td>tempPath()</td> <td>系统的临时目录</td> </tr> </tbody> </table> 静态函数setCurrent()也可以用来设置应用程序的工作目录。 如果你想找到包含应用程序可执行文件的目录,请参阅`QCoreApplication::applicationDirPath()`。 静态函数`drives()` 为每个包含文件系统的设备提供根目录列表。在Unix系统上,它返回一个包含单个根目录"/"的列表;在Windows上,列表通常包含C:/,可能还有其他驱动器号,如D:/,这取决于用户系统的配置。 ## 路径操作和字符串 ## 使用`canonicalPath()`函数,可以将包含引用当前目录的`.`元素的路径、引用父目录的`..`元素以及符号链接简化为规范形式。 路径也可以通过使用`cleanPath()`来删除冗余的`/`和`..`元素来简化。 有时有必要以用户平台的本机表示形式显示路径。静态`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()); } 列出当前目录中所有文件(符号链接除外)的程序,按大小排序,最小的在前: #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; } 另请参见: QFileInfo, QFile, QFileDialog, [QCoreApplication::applicationDirPath()][QCoreApplication_applicationDirPath], [Find Files Example][]. # 公开类型 # ## Filter && Filters ## > **enum QDir::Filter** > **flags QDir::Filters** 该枚举描述了QDir可用的筛选选项;例如:entryList()和entryInfoList()。过滤器值是通过使用按位或操作符组合下面列表中的值来指定的: <table> <thead> <tr> <th>常量</th> <th>值</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>QDir::Dirs</td> <td>0x001</td> <td>列出与过滤器匹配的目录。</td> </tr> <tr> <td>QDir::AllDirs</td> <td>0x400</td> <td>列出所有目录;即不要将过滤器应用于目录名称。</td> </tr> <tr> <td>QDir::Files</td> <td>0x002</td> <td>列出文件。</td> </tr> <tr> <td>QDir::Drives</td> <td>0x004</td> <td>列出磁盘驱动器(在Unix下被忽略)。</td> </tr> <tr> <td>QDir::NoSymLinks</td> <td>0x008</td> <td>不要列出符号链接(被不支持符号链接的操作系统所忽略)。</td> </tr> <tr> <td>QDir::NoDotAndDotDot</td> <td>NoDot</td> <td>NoDotDot</td> </tr> <tr> <td>QDir::NoDot</td> <td>0x2000</td> <td>不要列出特殊条目<code>.</code>。</td> </tr> <tr> <td>QDir::NoDotDot</td> <td>0x4000</td> <td>不要列出特殊条目<code>..</code>。</td> </tr> <tr> <td>QDir::AllEntries</td> <td>Dirs</td> <td>Files</td> </tr> <tr> <td>QDir::Readable</td> <td>0x010</td> <td>列出应用程序对其具有读取访问权限的文件。Readable值需要与Dirs或Files结合使用。</td> </tr> <tr> <td>QDir::Writable</td> <td>0x020</td> <td>列出应用程序对其具有写访问权的文件。可写值需要与Dirs或Files结合使用。</td> </tr> <tr> <td>QDir::Executable</td> <td>0x040</td> <td>列出应用程序对其具有执行访问权限的文件。可执行值需要与Dirs或Files结合使用。</td> </tr> <tr> <td>QDir::Modified</td> <td>0x080</td> <td>仅列出已修改的文件(在Unix上被忽略)。</td> </tr> <tr> <td>QDir::Hidden</td> <td>0x100</td> <td>列出隐藏文件(在Unix上,以<code>.</code>开头的文件)。</td> </tr> <tr> <td>QDir::System</td> <td>0x200</td> <td>列出系统文件(在Unix上,包括FIFO,套接字和设备文件;在Windows上,.lnk包括文件)</td> </tr> <tr> <td>QDir::CaseSensitive</td> <td>0x800</td> <td>过滤器应区分大小写。</td> </tr> </tbody> </table> 除非您设置NoSymLinks值,否则使用“筛选枚举”值筛选文件和目录列表的函数将包括指向文件和目录的符号链接。 默认构造的QDir不会根据文件的权限过滤掉文件,因此`entryList()和entryInfoList()`将返回所有可读,可写,可执行或这三者的任意组合的文件。这使默认值易于编写,同时又很有用。 例如,设置Readable,Writable以及Files标志允许所有文件中列出了该应用程序可以读权限,写权限或两者兼而有之。如果Dirs和Drives标志也包含在此组合中,则可以列出所有驱动器,目录,应用程序可以读取,写入或执行的所有文件,以及指向此类文件/目录的符号链接。 要检索目录的权限,请使用`entryInfoList()`函数获取关联的QFileInfo对象,然后使用`QFileInfo::permissons()`获取每个文件的权限和所有权。 Filters 类型是`QFlags<Filter>`的typedef 。它存储过滤器值的“或”组合。 ## SortFlag&&SortFlags ## > **enum QDir::SortFlag** > **flags QDir::SortFlags** 该枚举描述了QDir可用的排序选项,例如entryList()和entryInfoList()。排序值是通过OR-ing将下面列表中的值组合在一起来指定的: <table> <thead> <tr> <th>常量</th> <th>值</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>QDir::Name</td> <td>0x00</td> <td>按名称分类。</td> </tr> <tr> <td>QDir::Time</td> <td>0x01</td> <td>按时间排序(修改时间)。</td> </tr> <tr> <td>QDir::Size</td> <td>0x02</td> <td>按文件大小排序。</td> </tr> <tr> <td>QDir::Type</td> <td>0x80</td> <td>按文件类型排序(扩展名)。</td> </tr> <tr> <td>QDir::Unsorted</td> <td>0x03</td> <td>不排序。</td> </tr> <tr> <td>QDir::NoSort</td> <td>-1</td> <td>默认情况下不排序。</td> </tr> <tr> <td>QDir::DirsFirst</td> <td>0x04</td> <td>首先放置目录,然后放置文件。</td> </tr> <tr> <td>QDir::DirsLast</td> <td>0x20</td> <td>首先放置文件,然后放置目录。</td> </tr> <tr> <td>QDir::Reversed</td> <td>0x08</td> <td>颠倒排序顺序。</td> </tr> <tr> <td>QDir::IgnoreCase</td> <td>0x10</td> <td>不区分大小写地排序。</td> </tr> <tr> <td>QDir::LocaleAware</td> <td>0x40</td> <td>使用当前的语言环境设置对项目进行适当排序。</td> </tr> </tbody> </table> 您只能指定前四个中的一个。 如果同时指定DirsFirst和Reversed,目录仍然放在首位,但顺序相反;文件将再次以相反的顺序列在目录后面。 SortFlags类型是`QFlags<SortFlag>`的类型定义。它存储SortFlag值的一个或多个组合。 # 成员函数 # ## QDir ## > **\[since 6.0\] > QDir::QDir(const std::filesystem::path &path, const QString &nameFilter, QDir::SortFlags sort = SortFlags(Name | IgnoreCase), QDir::Filters filters = AllEntries)** 使用path path构造一个QDir,它使用名称过滤器按名称筛选器筛选条目,使用过滤器按属性筛选条目。它还使用sort对名称进行排序。 默认的名称过滤器是一个空字符串,它不排除任何内容;默认的过滤器是AllEntries,它也不排除任何内容。默认排序是Name | IgnoreCase,即不区分大小写的按名称排序。 如果path为空,QDir使用`.`(当前目录)。如果namefter是一个空字符串,QDir使用名称过滤器`*`(所有文件)。 注意:path不需要存在。 这个函数是在Qt 6.0中引入的。 另请参见: exists(), setPath(), setNameFilters(), setFilter(), setSorting(). > **\[since 6.0\]QDir::QDir(const std::filesystem::path &path)** 构造一个指向给定目录路径的QDir。如果path为空,则使用程序的工作目录(".")。 这个函数是在Qt 6.0中引入的。 另请参见:currentPath(). > **QDir::QDir(const QString &path, const QString &nameFilter, QDir::SortFlags sort = SortFlags(Name | IgnoreCase), QDir::Filters filters = AllEntries)** 使用path path构造一个QDir,它使用名称过滤器按名称筛选器筛选条目,使用过滤器按属性筛选条目。它还使用sort对名称进行排序。 默认的名称过滤器是一个空字符串,它不排除任何内容;默认的过滤器是AllEntries,它也不排除任何内容。默认排序是Name | IgnoreCase,即不区分大小写的按名称排序。 如果path是空字符串,QDir使用"."(当前目录)。如果namefter是一个空字符串,QDir使用名称过滤器“\*”(所有文件)。 注意:path不需要存在。 另请参见:exists(), setPath(), setNameFilters(), setFilter(), setSorting(). > **QDir::QDir(const QString &path = QString())** 构造一个指向给定目录路径的QDir。如果path为空,则使用程序的工作目录(".")。 另请参见:currentPath(). > **QDir::QDir(const QDir &dir)** 构造一个QDir对象,该对象是目录dir的QDir对象的副本。 另请参见:operator=(). ## operator=() ## > **\[since 5.2\] > QDir &QDir::operator=(QDir &&other)** move -将other分配给这个QDir实例。 > **QDir &QDir::operator=(const QDir &dir)** 创建一个dir对象的副本,并将其分配给这个QDir对象。 ## ~QDir() ## > **QDir::~QDir()** 销毁QDir对象释放其资源。这对文件系统中的底层目录没有影响。 ## absoluteFilePath ## > **QString QDir::absoluteFilePath(const QString &fileName) const** 返回目录中文件的绝对路径名。不检查文件是否实际存在于目录中。没有删除文件名中的冗余多分隔符或".“和”…"目录(参见cleanPath())。 另请参见: relativeFilePath(), filePath(), canonicalPath(). ## absolutePath ## > **QString QDir::absolutePath() const** 返回绝对路径(以“ /”开头或以驱动器规范开头的路径),该路径可能包含符号链接,但绝不包含多余的`.`, `..`或多个分隔符。 ## addSearchPath ## > **\[static\] > void QDir::addSearchPath(const QString &prefix, const QString &path)** > **\[static, since 6.0\] > void QDir::addSearchPath(const QString &prefix, const std::filesystem::path &path)** 将路径添加到前缀的搜索路径中。 另请参见:`setSearchPaths().` ## canonicalPath ## > **QString QDir::canonicalPath() const** 返回规范路径,即没有符号链接或冗余的".“或”…"元素的路径。 在没有符号链接的系统上,这个函数将总是返回与absolutePath()返回的相同的字符串。如果规范路径不存在(通常由于悬空的符号链接),canonicalPath()将返回一个空字符串。 例子: QString bin = "/local/bin"; // where /local/bin is a symlink to /usr/bin QDir binDir(bin); QString canonicalBin = binDir.canonicalPath(); // canonicalBin now equals "/usr/bin" QString ls = "/local/bin/ls"; // where ls is the executable "ls" QDir lsDir(ls); QString canonicalLs = lsDir.canonicalPath(); // canonicalLS now equals "/usr/bin/ls". 另请参见:`path(), absolutePath(), exists(), cleanPath(), dirName(), absoluteFilePath().` ## cd ## > **bool QDir::cd(const QString &dirName)** 将QDir的目录更改为dirName。 如果新目录存在,返回true;否则返回false。注意,如果新目录不存在,则不会执行logical cd()操作。 调用cd("…")相当于调用cdUp()。 另请参见:`cdUp(), isReadable(), exists(), path().` ## cdUp ## > **bool QDir::cdUp()** 通过从QDir的当前目录向上移动一个目录来更改目录。 如果新目录存在,返回true;否则返回false。注意,如果新目录不存在,则不会执行逻辑cdUp()操作。 另请参见:`cd(), isReadable(), exists(), path().` ## cleanPath ## > **\[static\] > QString QDir::cleanPath(const QString &path)** 返回标准化目录分隔符(即将平台本机分隔符转换为"/")并删除冗余分隔符和"的路径。“s”和“…”已解决(尽可能)。 保留符号链接。此函数不返回规范路径,而是返回最简单的输入版本。例如,“ ./ local”变成“ local”,“ local /…/ bin”变成“ bin”,“ / local / usr /…/ bin”变成“ / local / bin”。 另请参见:absolutePath() , canonicalPath(). ## count ## > **uint QDir::count() const** 返回目录和目录中文件的总数。 等效于entryList().count()。 另请参见:`operator[]() , entryList().` ## current ## > **\[static\] > QDir QDir::current()** 返回应用程序的当前目录。 使用当前目录的绝对路径构造目录,确保其path()与absolutePath()相同。 另请参见:`currentPath(), setCurrent(), home(), root(), temp().` ## currentPath ## > **\[static\] > QString QDir::currentPath()** 返回应用程序当前目录的绝对路径。当前目录是使用QDir::setCurrent()设置的最后一个目录,或者,如果从未调用该目录,则是父进程启动此应用程序的目录。 另请参见:current(), setCurrent(), homePath(), rootPath(), tempPath(), QCoreApplication::applicationDirPath(). ## dirName ## > **QString QDir::dirName() const** 返回目录的名称;这和路径是不一样的,例如,一个名为“mail”的目录可能有“/var/spool/mail”的路径。如果目录没有名称(例如,它是根目录),则返回一个空字符串。 没有检查以确保这个名称的目录实际存在 另请参见:`path(), filePath(), absolutePath(), absoluteFilePath().` ## drives ## > **\[static\] > QFileInfoList QDir::drives()** 返回此系统上的根目录列表。 在Windows上,它返回一个包含"C:/", "D:/"等QFileInfo对象的列表。在其他操作系统上,它返回一个只包含一个根目录的列表。“/”)。 另请参阅:root()和rootPath()。 ## entryInfoList ## > **QFileInfoList QDir::entryInfoList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const** 返回目录中所有文件和目录的QFileInfo对象列表,根据前面用setNameFilters()和setFilter()设置的名称和属性过滤器进行排序,并根据setsorted()设置的标志进行排序。 名称筛选器、文件属性筛选器和排序规范可以使用名称筛选器、筛选器和排序参数覆盖。 如果目录不可读、不存在或没有任何内容与规范匹配,则返回空列表。 另请参阅:entryList(), setNameFilters(), setSorting(), setFilter(), isReadable()和 exists(). > **QFileInfoList QDir::entryInfoList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const** 这是一个重载函数。 返回目录中所有文件和目录的QFileInfo对象列表,根据前面用setNameFilters()和setFilter()设置的名称和属性过滤器进行排序,并根据setsorted()设置的标志进行排序。 属性筛选器和排序规范可以使用筛选器和排序参数覆盖。 如果目录不可读、不存在或没有任何内容与规范匹配,则返回空列表。 另请参阅:entryList(), setNameFilters(), setSorting(), setFilter(), isReadable(), exists(). ## entryList ## > **QStringList QDir::entryList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const** 返回目录中所有文件和目录的名称列表,根据前面用setNameFilters()和setFilter()设置的名称和属性过滤器排序,并根据setsorted()设置的标志排序。 名称筛选器、文件属性筛选器和排序规范可以使用名称筛选器、筛选器和排序参数覆盖。 如果目录不可读、不存在或没有任何内容与规范匹配,则返回空列表。 另请参阅:entryInfoList(), setNameFilters(), setSorting(), setFilter(). > **QStringList QDir::entryList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const** 这是一个重载函数。 返回目录中所有文件和目录的名称列表,根据前面用setNameFilters()和setFilter()设置的名称和属性过滤器排序,并根据setsorted()设置的标志排序。 属性筛选器和排序规范可以使用筛选器和排序参数覆盖。 如果目录不可读、不存在或没有任何内容与规范匹配,则返回空列表。 注意:要列出指向不存在文件的符号链接,必须将System传递给筛选器。 另请参阅:entryInfoList(), setNameFilters(), setSorting(), setFilter(). ## exists ## > **bool QDir::exists(const QString &name) const** 如果名为name的文件存在,则返回true;否则返回false。 除非name包含一个绝对文件路径,否则文件名会被认为是相对于目录本身的,因此这个函数通常用于检查目录中是否存在文件。 另请参阅:QFileInfo::exists() 、QFile::exists(). > **bool QDir::exists() const** 这是一个重载函数。 如果目录存在则返回true;否则返回false。(如果找到同名的文件,这个函数将返回false)。 接受参数的函数重载用于测试目录中是否存在文件和目录。 另请参阅:QFileInfo::exists() 、QFile::exists(). ## filePath ## > **QString QDir::filePath(const QString &fileName) const** 返回目录中文件的路径名。不检查文件是否实际存在于目录中。如果QDir是相对的,则返回的路径名也是相对的。没有删除文件名中的冗余多分隔符或".“和”…"目录(参见cleanPath())。 另请参阅: dirName(), absoluteFilePath(), isRelative(), canonicalPath(). ## filesystemAbsolutePath ## > **\[since 6.0\] > std::filesystem::path QDir::filesystemAbsolutePath() const** 以std::filesystem::path的形式返回absolutePath()。 这个函数是在Qt 6.0中引入的。 另请参阅: absolutePath(). ## filesystemCanonicalPath ## > **\[since 6.0\] > std::filesystem::path QDir::filesystemCanonicalPath() const** 以std::filesystem::path的形式返回canonicalPath()。 另请参阅: canonicalPath(). ## filesystemPath ## > **\[since 6.0\] > std::filesystem::path QDir::filesystemPath() const** 以std::filesystem::path的形式返回path()。 另请参阅: path(). ## filter ## > **QDir::Filters QDir::filter() const** 返回由setFilter()设置的值 另请参阅:setFilter(). ## fromNativeSeparators ## > **\[static\] > QString QDir::fromNativeSeparators(const QString &pathName)** 使用’/'作为文件分隔符返回路径名。例如,在Windows上,fromNativeSeparators(“c:\\winnt\\ system32”)返回"c:/winnt/system32"。 返回的字符串可能与某些操作系统上的参数相同,例如在Unix上。 另请参阅: toNativeSeparators() 、separator(). ## home ## > **\[static\] > QDir QDir::home()** 返回用户的主目录。 使用主目录的绝对路径构造目录,确保其path()与absolutePath()相同。 详情请参见homePath()。 另请参阅: drives(), current(), root(), temp(). ## homePath ## > **\[static\] > QString QDir::homePath()** > \\返回用户主目录的绝对路径。 在Windows下,该函数将返回当前用户配置文件的目录。通常,这是: C:/Documents and Settings/Username 使用toNativeSeparators()函数将分隔符转换为适合底层操作系统的分隔符。 如果当前用户配置文件的目录不存在或无法检索,将检查以下选项(按给定顺序),直到找到一个存在且可用的路径: * 环境变量USERPROFILE指定的路径。 * 连接HOMEDRIVE和HOMEPATH环境变量所形成的路径。 * 主环境变量指定的路径。 * rootPath()函数返回的路径(它使用SystemDrive环境变量) * C: /目录中。 * 在非windows操作系统下,如果HOME环境变量存在,则使用它,否则使用rootPath()返回的路径。 请参阅home()、currentPath()、rootPath()和tempPath()。 ## isAbsolute ## > **bool QDir::isAbsolute() const** 如果目录路径是绝对路径则返回true;否则返回false。 注意:以冒号(:)开头的路径总是被认为是绝对的,因为它们表示QResource。 另请参阅: isRelative(), makeAbsolute(), cleanPath(). ## isAbsolutePath ## > **\[static\]bool QDir::isAbsolutePath(const QString &path)** 如果path是绝对的,则返回true;如果是相对的,返回false。 注意:以冒号(:)开头的路径总是被认为是绝对的,因为它们表示QResource。 另请参阅: isAbsolute(), isRelativePath(), makeAbsolute(), cleanPath(), QResource. ## isEmpty ## > **\[since 5.9\] > bool QDir::isEmpty(QDir::Filters filters = Filters(AllEntries | NoDotAndDotDot)) const** 返回目录是否为空。 相当于count() == 0使用过滤器QDir::AllEntries | QDir::NoDotAndDotDot,但更快,因为它只检查目录是否包含至少一个条目。 注意:除非你设置过滤器标志包括QDir::NoDotAndDotDot(如默认值所做的),否则没有目录是空的。 这个函数是在Qt 5.9中引入的。 另请参阅count()、entryList()和setFilter()。 ## isReadable ## > **bool QDir::isReadable() const** 如果目录是可读的并且可以按名称打开文件,则返回true;否则返回false。 这个函数的false值并不能保证目录中的文件是不可访问的。 参见QFileInfo: isReadable()。 ## isRelative ## > **bool QDir::isRelative() const** 如果目录路径是相对的,则返回true;否则返回false。(在Unix下,如果路径不是以“/”开头,那么它是相对的)。 注意:以冒号(:)开头的路径总是被认为是绝对的,因为它们表示QResource。 参见makeAbsolute()、isAbsolute()、isAbsolutePath()和cleanPath()。 ## isRelativePath ## > **\[static\] > bool QDir::isRelativePath(const QString &path)** 如果path是相对的,则返回true;如果是绝对值则返回false。 注意:以冒号(:)开头的路径总是被认为是绝对的,因为它们表示QResource。 参见isRelative()、isAbsolutePath()和makeAbsolute()。 ## isRoot ## > **bool QDir::isRoot() const** 如果目录是根目录则返回true;否则返回false。 注意:如果这个目录是一个到根目录的符号链接,这个函数将返回false。如果你想测试这个,可以使用canonicalPath(),例如: QDir dir("/tmp/root_link"); dir = dir.canonicalPath(); if (dir.isRoot()) qWarning("It is a root link"); 另请参阅root()和rootPath()。 ## listSeparator ## > **\[static, since 5.6\] > QChar QDir::listSeparator()** 返回本地路径列表分隔符: Unix下的`:`,Windows下的`;`。 这个函数是在Qt 5.6中引入的。 另请参阅 separator(). ## makeAbsolute ## > **bool QDir::makeAbsolute()** 将目录路径转换为绝对路径。如果它已经是绝对的,什么也不会发生。如果转换成功则返回true;否则返回false。 另请参阅 isAbsolute(), isAbsolutePath(), isRelative(), cleanPath(). ## match ## > **\[static\] > bool QDir::match(const QString &filter, const QString &fileName)** 如果文件名匹配通配符(glob)模式过滤器则返回true;否则返回false。过滤器可以包含用空格或分号分隔的多个模式。不区分大小写。 参见qregulareexpression通配符匹配、entryList()和entryInfoList()。 > **\[static\] > bool QDir::match(const QStringList &filters, const QString &fileName)** 这是一个重载函数。 如果文件名匹配过滤器列表中的任何通配符(glob)模式,则返回true;否则返回false。不区分大小写。 参见qregulareexpression通配符匹配、entryList()和entryInfoList()。 ## mkdir ## > **bool QDir::mkdir(const QString &dirName) const** 创建名为dirName的子目录。 成功返回true;否则返回false。 如果这个目录在调用这个函数时已经存在,它将返回false。 参见rmdir()。 ## mkpath ## > **bool QDir::mkpath(const QString &dirPath) const** 创建目录路径dirPath。 该函数将创建创建目录所需的所有父目录。 如果成功返回true;否则返回false。 如果该路径在调用此函数时已经存在,则返回true。 参见rmpath()。 ### mkdir和mkpath的区别 ### mkdir:上层目录不存在时,创建会失败 mkpath:上层目录不存在也没关系,自动一起创建 结论,mkpath是创建所有层级的目录,而mkdir仅仅创建一层目录 ## nameFilters ## > **QStringList QDir::nameFilters() const** 返回由setnamfilters()设置的字符串列表 参见setNameFilters()。 ## path ## > **QString QDir::path() const** 返回路径。这可能包含符号链接,但绝不包含冗余的".","…"或多个分隔符。 返回的路径可以是绝对的或相对的(参见setPath())。 参见setPath(), absolutePath(), exists(), cleanPath(), dirName(), absoluteFilePath(), toNativeSeparators(), makeAbsolute(). ## refresh ## > **void QDir::refresh() const** 刷新目录信息。 ## relativeFilePath ## > **QString QDir::relativeFilePath(const QString &fileName) const** 返回相对于目录的文件名路径。 QDir dir("/home/bob"); QString s; s = dir.relativeFilePath("images/file.jpg"); // s is "images/file.jpg" s = dir.relativeFilePath("/home/mary/file.txt"); // s is "../mary/file.txt" 参见absoluteFilePath(), filePath(), and canonicalPath(). ## remove ## > **bool QDir::remove(const QString &fileName)** 删除文件fileName。 如果文件被成功删除,返回true;否则返回false。 ## removeRecursively ## > **\[since 5.0\] > bool QDir::removeRecursively()** 删除目录,包括其所有内容。 如果成功返回true,否则返回false。 如果一个文件或目录不能被删除,removerrecursive()会继续执行并尝试删除尽可能多的文件和子目录,然后返回false。 如果目录已经被删除,该方法将返回true(预期结果已经到达)。 注意:这个函数用于删除应用程序内部的小目录(如临时目录),而不是用户可见的目录。对于用户可见的操作,建议更精确地向用户报告错误,在出现错误的情况下提供解决方案,显示删除过程中的进度(因为这可能需要几分钟),等等。 这个函数是在Qt 5.0中引入的。 ## rename ## > **bool QDir::rename(const QString &oldName, const QString &newName)** 将文件或目录从oldName重命名为newName,如果成功则返回true;否则返回false。 在大多数文件系统中,rename()仅在oldName不存在或具有新名称的文件已经存在时才会失败。然而,rename()失败还有其他原因。例如,在至少一个文件系统上,如果newName指向一个打开的文件,rename()就会失败。 如果oldName是一个不能立即重命名的文件(而不是目录),Qt将尝试将oldName复制到newName并删除oldName。 参见`QFile::rename().` ## rmdir ## > **bool QDir::rmdir(const QString &dirName) const** 删除由dirName指定的目录。 目录必须为空,rmdir()才能成功。 如果成功返回true;否则返回false。 参见`mkdir().` ## rmpath ## > **bool QDir::rmpath(const QString &dirPath) const** 删除目录路径“dirPath”。 该函数将删除dirPath中的所有父目录,前提是它们是空的。这与mkpath(dirPath)相反。 如果成功返回true;否则返回false。 参见`mkpath().` ## root ## > **\[static\] > QDir QDir::root()** 返回根目录。 使用根目录的绝对路径构造目录,确保其path()与absolutePath()相同。 有关详细信息,请参见rootPath()。 参见: drives(), current(), home(), temp(). ## rootPath ## > **\[static\] > QString QDir::rootPath()** 返回根目录的绝对路径。 对于Unix操作系统,它返回"/"。对于Windows文件系统,这通常返回"c:/"。 参见:root(), drives(), currentPath(), homePath(), tempPath(). ## searchPaths ## > **\[static\] > QStringList QDir::searchPaths(const QString &prefix)** 返回前缀的搜索路径。 另请参阅setSearchPaths()和addSearchPath()。 ## separator ## > **\[static\] > QChar QDir::separator()** 返回本机目录分隔符:Unix下的"/",Windows下的""。 您不需要使用这个函数来构建文件路径。如果你总是使用"/",Qt将转换你的路径以符合底层操作系统。如果要使用操作系统的分隔符向用户显示路径,请使用toNativeSeparators()。 参见listSeparator()。 ## setCurrent ## > **\[static\] > bool QDir::setCurrent(const QString &path)** 将应用程序的当前工作目录设置为path。如果成功更改了目录,则返回true;否则返回false。 请参阅current()、currentPath()、home()、root()和temp()。 ## setFilter ## > **void QDir::setFilter(QDir::Filters filters)** 设置entryList()和entryInfoList()使用的筛选器为筛选器。过滤器用于指定entryList()和entryInfoList()应该返回的文件类型。参见QDir:Filter。 另请参阅filter()和setnamfilters()。 ## setNameFilters ## > **void QDir::setNameFilters(const QStringList &nameFilters)** 将entryList()和entryInfoList()使用的名称筛选器设置为由名称筛选器指定的筛选器列表。 每个名称过滤器都是通配符(通配符)过滤器,可以理解\*和?通配符。参见qregulareexpression通配符匹配。 例如,下面的代码在一个QDir上设置了三个名称过滤器,以确保只列出典型用于c++源文件的扩展名文件: QStringList filters; filters << "*.cpp" << "*.cxx" << "*.cc"; dir.setNameFilters(filters); 另请参见nameFilters()和setFilter() ## setPath ## > **void QDir::setPath(const QString &path)** 设置目录的路径为path。清除路径中多余的“.”、“…”和多个分隔符。没有检查具有此路径的目录是否实际存在;但是您可以使用exists()自己检查。 路径可以是绝对的,也可以是相对的。绝对路径以目录分隔符“/”开始(在Windows下,前面可以有驱动器规范)。相对文件名以目录名或文件名开头,并指定相对于当前目录的路径。绝对路径的一个例子是字符串"/tmp/quartz",相对路径可能看起来像"src/fatlib"。 参见path()、absolutePath()、exists()、cleanPath()、dirName()、absoluteFilePath()、isRelative()和makeAbsolute()。 > **\[since 6.0\] > void QDir::setPath(const std::filesystem::path &path)** 这是一个重载函数。 这个函数是在Qt 6.0中引入的。 ## setSearchPaths ## > **\[static\] > void QDir::setSearchPaths(const QString &prefix, const QStringList &searchPaths)** 用搜索路径的前缀前缀设置或替换Qt的文件名搜索路径。 为文件名指定一个前缀,在前缀前加上一个冒号(例如,“images:undo.png”, “xmldocs:books.xml”)。前缀只能包含字母或数字(例如,它不能包含冒号或斜杠)。 Qt使用这个搜索路径来定位带有已知前缀的文件。按顺序测试搜索路径条目,从第一个条目开始。 QDir::setSearchPaths("icons", QStringList(QDir::homePath() + "/images")); QDir::setSearchPaths("docs", QStringList(":/embeddedDocuments")); ... QPixmap pixmap("icons:undo.png"); // will look for undo.png in QDir::homePath() + "/images" QFile file("docs:design.odf"); // will look in the :/embeddedDocuments resource path 文件名前缀必须至少2个字符,以避免与Windows驱动器符冲突。 搜索路径可能包含到Qt资源系统的路径。 参见searchpath()。 ## setSorting ## > **void QDir::setSorting(QDir::SortFlags sort)** 设置entryList()和entryInfoList()使用的排序顺序。 排序是由enum QDir::SortFlag中的OR-ing值指定的。 另请参阅sorted()和SortFlag。 ## sorting ## > **QDir::SortFlags QDir::sorting() const** 返回setsorted()设置的值 请参阅setsorted()和SortFlag。 ## swap ## > **\[since 5.0\] > void QDir::swap(QDir &other)** 将这个QDir实例与其他实例交换。这个函数非常快,而且永远不会失败。 这个函数是在Qt 5.0中引入的。 ## temp ## > **\[static\] > QDir QDir::temp()** 返回系统的临时目录。 使用临时目录的绝对规范路径构造目录,确保其path()与absolutePath()相同。 详情请参见tempPath()。 另请参阅drives()、current()、home()和root()。 ## tempPath ## > **\[static\] > QString QDir::tempPath()** 返回系统临时目录的绝对规范路径。 在Unix/Linux系统上,这是环境变量TMPDIR中的路径,如果没有定义TMPDIR,则为/tmp。在Windows上,这通常是TEMP或TMP环境变量中的路径。此方法返回的路径不会以目录分隔符结束,除非它是(驱动器的)根目录。 参见temp()、currentPath()、homePath()和rootPath()。 ## toNativeSeparators ## > **\[static\] > QString QDir::toNativeSeparators(const QString &pathName)** 返回将’/'分隔符转换为适合底层操作系统的分隔符的路径名。 在Windows上,toNativeSeparators(“c:/winnt/system32”)返回"c:\\winnt\\system32"。 返回的字符串可能与某些操作系统上的参数相同,例如在Unix上。 参见fromNativeSeparators()和separator()。 ## operator!= ## > **bool QDir::operator!=(const QDir &dir) const** 如果目录dir和此目录有不同的路径或不同的排序或过滤设置,则返回true;否则返回false。 例子: // The current directory is "/usr/local" QDir d1("/usr/local/bin"); d1.setFilter(QDir::Executable); QDir d2("bin"); if (d1 != d2) qDebug("They differ"); ## operator== ## > **bool QDir::operator==(const QDir &dir) const** 如果目录dir和此目录有相同的路径,并且它们的排序和过滤器设置相同,则返回true;否则返回false。 例子: // The current directory is "/usr/local" QDir d1("/usr/local/bin"); QDir d2("bin"); if (d1 == d2) qDebug("They're the same"); ## operator\[\] ## > **QString QDir::operator\[\](int pos) const** 返回文件名列表中位于pos位置的文件名。相当于entryList()倍(索引)。pos必须是列表中有效的索引位置(即0 <= pos < count())。 另请参阅count()和entryList()。 # 宏 # ## Q\_CLEANUP\_RESOURCE ## > **void Q\_CLEANUP\_RESOURCE(name)** 卸载由.qrc文件指定的具有基本名称的资源。 通常,当应用程序终止时,Qt资源会自动卸载,但是如果资源位于正在卸载的插件中,调用Q\_CLEANUP\_RESOURCE()强制删除你的资源。 注意:这个宏不能在命名空间中使用。有关解决方案,请参阅Q\_INIT\_RESOURCE文档。 例子: Q_CLEANUP_RESOURCE(myapp); 另请参见Q\_INIT\_RESOURCE()和Qt资源系统。 ## Q\_INIT\_RESOURCE ## > **void Q\_INIT\_RESOURCE(name)** 用指定的基名初始化.qrc文件指定的资源。通常,当资源作为应用程序的一部分构建时,资源在启动时自动加载。在一些平台上,对于存储在静态库中的资源,Q\_INIT\_RESOURCE()宏是必需的。 例如,如果应用程序的资源列在一个名为myapp的文件中。qrc,你可以通过在main()函数中添加这一行来确保资源在启动时被初始化: Q_INIT_RESOURCE(myapp); 如果文件名中包含的字符不能作为有效c++函数名的一部分(如’-’),则必须用下划线字符(’\_’)替换。 注意:这个宏不能在命名空间中使用,应该从main()调用它。如果无法做到这一点,则可以使用以下解决方法用来从函数MyNamespace::myFunction初始化资源myapp inline void initMyResource() { Q_INIT_RESOURCE(myapp); } namespace MyNamespace { ... void myFunction() { initMyResource(); } } 另请参见Q\_CLEANUP\_RESOURCE()和Qt资源系统。 [Link 1]: https://blog.csdn.net/zhizhengguan/article/details/81587788 [QCoreApplication_applicationDirPath]: https://doc.qt.io/qt-6/qcoreapplication.html#applicationDirPath [Find Files Example]: https://doc.qt.io/qt-6/qtwidgets-dialogs-findfiles-example.html
还没有评论,来说两句吧...