102-数据读写和文件管理-数据读写基本类-路径管理QDir

路径管理QDir

路径管理QDir 用于管理路径和文件它的一些功能与QFilenfo的功能相同。

用QDir创建路径管理对象的方法如下,其中:path 是路径;nameFilter 是名称过滤器;sort 是枚举类型QDirSortFlag,指定排序规则;filters 是枚举类型QDirFilter,是属性过滤器

from PySide6.QtCore import QDir

QDir(arg__1: Union[PySide6.QtCore.QDir,str])-> None
QDir(path: Union[str,bytes,os.PathLike,NoneType])-> None
QDir(path: Union[str,bytes,os.PathLike],nameFilter: str,sort: PySide6.QtCore.QDir.SortFlag = Instance(QDir.SortFlags(QDir.SortFlag.Name | QDir.SortFlag.IgnoreCase)),filter: PySide6.QtCore.QDir.Filter = Instance(QDir.Filter.AllEntries))-> None
路径管理QDir的说明

QDir用于操作路径名、访问有关路径和文件的信息以及操作底层文件系统。它还可以用于访问Qt的资源系统。
Qt使用"/“作为通用目录分隔符,其方式与URL中将”/“用作路径分隔符的方式相同。如果您总是使用”/"作为目录分隔符,Qt将转换您的路径以符合底层操作系统。
QDir可以使用相对路径或绝对路径指向文件。绝对路径以目录分隔符开头(在Windows下,可以选择在前面加上驱动器规范)。相对文件名以目录名或文件名开头,并指定相对于当前目录的路径。
绝对路径示例:

QDir("/home/user/Documents")
QDir("C:/Users")

在Windows上,当用于访问文件时,上面的第二个示例将被转换为C:\Users。
相对路径示例:

QDir("images/landscape.png")

您可以使用isRelative()或isAbsolute()函数来检查QDir使用的是相对文件路径还是绝对文件路径。调用makeAbsolute()将相对QDir转换为绝对QDir。

以冒号(:)开头的路径总是被认为是绝对的,因为它们表示一个QResource。

导航和目录操作

可以使用path()函数获取目录的路径,并使用setPath()函数设置新的路径。通过调用absolutePath()可以找到目录的绝对路径。
使用dirName()函数可以找到目录的名称。这通常返回指定目录位置的绝对路径中的最后一个元素。但是,如果QDir表示当前目录,它也可以返回"."。

QDir("Documents/Letters/Applications").dirName()//"Applications"
QDir().dirName()//"."

目录的路径也可以通过cd()和cdUp()函数更改,这两个函数的操作方式与熟悉的shell命令类似。当使用现有目录的名称调用cd()时,QDir对象会更改目录,使其代表该目录。函数的作用是更改QDir对象的目录,使其引用其父目录;即cd(“…”)相当于cdUp()。
目录可以用mkdir()创建,用rename()重命名,用rmdir()删除。
您可以使用exists()测试给定名称目录的存在性,并且可以使用isReadable()、isAbsolute()、isRelative()和isRoot()来测试目录的属性。
函数的作用是从磁盘中重新读取目录的数据。

文件和目录内容

目录包含许多条目,表示文件、目录和符号链接。目录中的项数由count()返回。可以使用entryList()获取目录中所有条目名称的字符串列表。如果需要有关每个条目的信息,请使用entryInfoList()获取QFileInfo对象的列表。
目录中的文件和目录的路径可以使用filePath()和absoluteFilePath()构造。filePath()函数返回指定文件或目录相对于QDir对象路径的路径;absoluteFilePath()返回指定文件或目录的绝对路径。这两个函数都不检查文件或目录的存在;它们只构建路径。

directory = QDir("Documents/Letters")
path = directory.filePath("contents.txt")
absolutePath = directory.absoluteFilePath("contents.txt")

可以使用remove()函数删除文件。目录不能以与文件相同的方式删除;使用rmdir()将其删除。
通过对QDir对象应用筛选器,可以减少entryList()和entryInfoList()返回的条目数量。您可以应用名称过滤器来指定文件名需要匹配的带有通配符的模式、选择条目属性并可以区分文件和目录的属性过滤器,以及排序顺序。
名称筛选器是传递给setNameFilters()的字符串列表。属性过滤器由过滤器的位或组合组成,这些过滤器是在调用setFilter()时指定的。排序顺序是使用setSorting()和SortFlags的按位或组合指定的。
您可以使用match()函数测试文件名是否与过滤器匹配。
在调用entryList()和entryInfoList()以覆盖先前定义的行为时,还可以指定筛选和排序顺序标志。

当前目录和其他特殊路径

通过返回QDir对象的许多静态函数提供了对一些常用目录的访问。这些函数也有相应的返回字符串的函数:

QDirQStringReturn Value
current()currentPath()应用程序的工作目录
home()homePath()用户的主目录
root()rootPath()根目录
temp()tempPath()系统的临时目录

setCurrent()静态函数也可以用于设置应用程序的工作目录。
如果要查找包含应用程序可执行文件的目录,请参阅applicationDirPath()。
drives()静态函数为每个包含文件系统的设备提供根目录列表。在Unix系统上,它返回一个包含单个根目录"/"的列表;在Windows上,根据用户系统的配置,列表通常包含C:/,可能还包含D:/等其他驱动器号。

路径操作和字符串

使用canonicalPath()函数,可以将包含引用路径中该点当前目录的".“元素、引用父目录的”…“元素和符号链接的路径简化为规范形式。
还可以通过使用cleanPath()删除多余的”/“和”…"元素来简化路径。
有时需要能够在用户平台的本机表示中显示路径。静态toNativeSeparators()函数返回指定路径的副本,其中每个目录分隔符都被底层操作系统的适当分隔符所取代。

示例

检查目录是否存在:

dir = QDir("example")
if not dir.exists():
    qWarning("Cannot find the example directory")

也可以使用其中一个静态便利函数exists()或exists)。
遍历目录并读取文件:

dir = QDir.root()#"/"()
if not dir.cd("tmp"): #"/tmp"
    qWarning("Cannot find the \"/tmp\"directory")
else:
    file = QFile(dir.filePath("ex1.txt"))
    if not file.open(QIODevice.ReadWrite):
        qWarning("Cannot create the file %s",file.name())

一个程序,列出当前目录中的所有文件(不包括符号链接),按大小排序,最小优先:

from PySide6.QtCore import QDir

if __name__ =="__main__":

    app = QCoreApplication(argc,argv)
    dir = QDir()
    dir.setFilter(QDir.Files | QDir.Hidden | QDir.NoSymLinks)
    dir.setSorting(QDir.Size | QDir.Reversed)
    list = dir.entryInfoList()
    print("Bytes Filename")
    for i in range(0,list.size()):
        fileInfo = list.at(i)
        print(qPrintable(QString("%1 %2").arg(fileInfo.size(),10))
                                                .arg(fileInfo.fileName()))
        std::cout << std::endl

    return 0

平台特定问题

在Android上,处理内容URI时会有一些限制:

  • 通过QFileDialog提示用户可能需要访问权限,该对话框实现了Android的本地文件选择器。
  • 旨在遵循Scoped存储指南,例如使用特定于应用程序的目录,而不是其他公共外部目录。有关详细信息,另请参阅存储最佳做法。
  • 由于Qt API(例如QFile)的设计,不可能将后一种API与Android的MediaStore API完全集成。
路径管理QDir的常用方法

QDir的常用方法如表所示,主要方法介绍如下

  • 可以在创建路径对象时指定路径,也可以用setPath(str)方法指定路径用path()方法获取路径。

  • 在创建路径对象时,指定的过滤器、排序规则用于获取路径下的文件和子路径。

    • 获取路径下的文件和子路径的方法有:

      • entryInfoList(filters,sort)

      • entryInfoList(Sequence[nameFilters],filters,sort)

      • entryList(filters,sort)

      • entryList[str]和entryList(Sequence[nameFilters],filters,sort)

      • 其中属性过滤器 filters 可以取PySide6.QtCore.QDir.Filter

    (继承enum.Flag)此枚举描述了QDir可用的筛选选项;例如entryList()和entryInfoList()。过滤器值是通过使用逐位OR运算符组合以下列表中的值来指定的

      使用Filter枚举值筛选文件和目录列表的函数将包括指向文件和目录的符号链接,除非您设置了NoSymLinks值。
      默认构造的QDir不会根据文件的权限筛选出文件,因此entryList()和entryInfoList()将返回可读、可写、可执行或三者的任何组合的所有文件。这使得默认设置易于编写,同时也很有用。
      例如,通过设置Readable、Writable和Files标志,可以列出应用程序具有读取访问权限、写入访问权限或两者兼有的所有文件。如果Dirs和Drives标志也包含在此组合中,则可以列出所有驱动器、目录、应用程序可以读取、写入或执行的所有文件,以及指向这些文件/目录的符号链接。
      要检索目录的权限,请使用entryInfoList()函数获取关联的QFileInfo对象,然后使用permissions()获取每个文件的权限和所有权。
      
      | Constant            | Description                                                  |
      | ------------------- | ------------------------------------------------------------ |
      | QDir.Dirs           | 列出与筛选器匹配的目录。                                     |
      | QDir.AllDirs        | 列出所有目录;即不将过滤器应用于目录名。                     |
      | QDir.Files          | 列出文件。                                                   |
      | QDir.Drives         | 列出磁盘驱动器(在Unix下被忽略)。                           |
      | QDir.NoSymLinks     | 不要列出符号链接(被不支持符号链接的操作系统忽略)。         |
      | QDir.NoDotAndDotDot | 不要列出特殊条目"."和".."。                                  |
      | QDir.NoDot          | 不要列出特殊条目"."。                                        |
      | QDir.NoDotDot       | 不要列出特殊条目".."。                                       |
      | QDir.AllEntries     | 列出目录、文件、驱动器和符号链接(除非指定"系统",否则不会列出断开的符号链接)。 |
      | QDir.Readable       | 列出应用程序具有读取访问权限的文件。Readable值需要与Dirs或Files组合使用。 |
      | QDir.Writable       | 列出应用程序具有写访问权限的文件。"可写入"值需要与"目录"或"文件"组合使用。 |
      | QDir.Executable     | 列出应用程序具有执行访问权限的文件。Executable值需要与Dirs或Files组合使用。 |
      | QDir.Modified       | 仅列出已修改的文件(在Unix上被忽略)。                       |
      | QDir.Hidden         | 列出隐藏文件(在Unix上,以"."开头的文件)。                  |
      | QDir.System         | 列出系统文件(在Unix上,包括FIFO、套接字和设备文件;在Windows上,包括.lnk文件)|
      | QDir.CaseSensitive  | 过滤器应区分大小写。                                         |
    

    • 排序规则 sort 可以取PySide6.QtCore.QDir.SortFlag

    (继承enum.Flag)此枚举描述了QDir可用的排序选项,例如entryList()和entryInfoList()。排序值是通过将以下列表中的值进行"或"运算来指定的:

    只能指定前四个选项中的一个。如果同时指定DirsFirst和Reversed,则目录仍然放在第一位,但顺序相反;文件将再次以相反的顺序列在目录之后。
    
    | Constant         | Description                          |
    | ---------------- | ------------------------------------ |
    | QDir.Name        | 按名称排序。                         |
    | QDir.Time        | 按时间排序(修改时间)。             |
    | QDir.Size        | 按文件大小排序。                     |
    | QDir.Type        | 按文件类型(扩展名)排序。           |
    | QDir.Unsorted    | 不要排序。                           |
    | QDir.NoSort      | 默认情况下不排序。                   |
    | QDir.DirsFirst   | 先放目录,然后放文件。               |
    | QDir.DirsLast    | 先放文件,然后放目录。               |
    | QDir.Reversed    | 颠倒排序顺序。                       |
    | QDir.IgnoreCase  | 区分大小写排序。                     |
    | QDir.LocaleAware | 使用当前区域设置对项目进行适当排序。 |
    

    • 名称过滤器、属性过滤器和排序规则也可以分别用setNameFilters(Sequence[str])、setFilter(QDir,Filter)和 setSorting(QDir.SortFlag)方法设置
  • 用setCurrent(str)方法设置应用程序当前的工作路径; 用currentPath()方法获取应用程序的当前绝对工作路径。

  • 用mkdir(str)方法创建子路径;

    • 用mkpath(str)方法创建多级路径;
    • 用rmdir(str)方法移除子路径,
    • 在路径为空的情况下,用rmpath(str)方法移除多级路径
QDir的方法及参数类型返回值的类型说 明
setPath(path: Union[str,bytes])None将目录的路径设置为路径。路径已清除多余的".“、”…“和多个分隔符。不检查是否确实存在具有此路径的目录;但您可以使用exists()进行自我检查。
路径可以是绝对路径,也可以是相对路径。绝对路径以目录分隔符”/“开头(在Windows下,可以选择在前面加上驱动器规范)。相对文件名以目录名或文件名开头,并指定相对于当前目录的路径。绝对路径的一个例子是字符串”/tmp/quartz",相对路径可能看起来像"src/fatlib"。
path()Str返回路径。这可能包含符号链接,但绝不包含冗余的".“、”…"或多个分隔符。
返回的路径可以是绝对路径,也可以是相对路径(请参见setPath())。
absoluteFilePath(fileName:str)StI返回目录中文件的绝对路径名。不检查该文件是否实际存在于目录中;但请参阅exists()。不会删除fileName中多余的多个分隔符或".“和”…"目录(请参阅cleanPath())。
absolutePath()str返回绝对路径(以"/“或驱动器规范开头的路径),该路径可能包含符号链接,但从不包含冗余的”.“、”…"或多个分隔符。
canonicalPath()Str返回规范路径,即没有符号链接或冗余".“或”…"元素的路径。
在没有符号链接的系统上,此函数将始终返回与absolutePath()返回的字符串相同的字符串。如果规范路径不存在(通常是由于悬挂的符号链接),则canonicalPath()返回一个空字符串。
例子:
bin = “/local/bin” # where /local/bin is a symlink to /usr/bin
binDir = QDir(bin)
canonicalBin = binDir.canonicalPath()
# canonicalBin now equals “/usr/bin”
ls = “/local/bin/ls” # where ls is the executable “ls”
lsDir = QDir(ls)
canonicalLs = lsDir.canonicalPath()
# canonicalLS now equals “/usr/bin/ls”.
cd(dirName: str)bool将QDir的目录更改为dirName。
如果存在新目录,则返回true;否则返回false。请注意,如果新目录不存在,则不会执行逻辑cd()操作。
调用cd(“…”)相当于调用cdUp()。
cdUp()bool通过从QDir的当前目录上移一个目录来更改目录。
如果存在新目录,则返回true;否则返回false。请注意,如果新目录不存在,则不会执行逻辑cdUp()操作。
count()int获取文件和路径的数量
dirName()Str返回目录的名称;这与路径不同,例如,名称为"mail"的目录可能具有路径"/var/spool/mail"。如果目录没有名称(例如,它是根目录),则返回一个空字符串。
不进行任何检查以确保具有此名称的目录确实存在;但请参阅exists()。
[static]drives()List[QFileInfo]返回此系统上的根目录列表。
在Windows上,这会返回包含"C:/"、“D:/“等的QFileInfo对象列表。这不会返回具有空的可弹出介质的驱动器。在其他操作系统上,它返回一个仅包含一个根目录(即”/”)的列表。
setNameFilters(Sequence[str])list of strings将entryList()和entryInfoList()使用的名称筛选器设置为nameFilters指定的筛选器列表。
每个名称过滤器都是一个通配符(globbing)过滤器,可以理解和?通配符。请参见通配符()。
例如,以下代码在QDir上设置了三个名称过滤器,以确保只列出扩展名通常用于C++源文件的文件:
filters = QStringList()
filters << "
.cpp" << “.cxx" << ".cc”
dir.setNameFilters(filters)
setFilter(QDir.Filter)None将entryList()和entryInfoList()使用的筛选器设置为筛选器。过滤器用于指定entryList()和entryInfoList()应返回的文件类型。请参见过滤器。
filter()获取setFilter()设置的值
setSorting(QDir.SortFlag)None设置entryList()和entryInfoList()使用的排序顺序。
排序是通过对枚举SortFlag中的值进行"或"运算来指定的。
sorting()QDir.SortFlag返回由setSorting()设置的值
swap(other:PySide6.QtCore.QDir)将此QDir实例与其他实例交换。这个功能非常快速,而且永远不会失败。
[static]setSearchPaths(prefix: str, searchPaths:Sequence[str])None将Qt的文件名搜索路径设置为或替换为searchPaths前缀。
要为文件名指定前缀,请在前缀前加一个冒号(例如,“images:undo.png”、“xmldocs:books.xml”)。前缀只能包含字母或数字(例如,不能包含冒号或斜线)。
Qt使用此搜索路径来查找具有已知前缀的文件。搜索路径条目按顺序进行测试,从第一个条目开始。
QDir.setSearchPaths(“icons”, QStringList(QDir.homePath()+ “/images”))
QDir.setSearchPaths(“docs”, QStringList(“:/embeddedDocuments”))

pixmap = QPixmap(“icons:undo.png”)# will look for undo.png in QDir.homePath()
file = QFile(“docs:design.odf”)
文件名前缀必须至少有2个字符长,以避免与Windows驱动器号冲突。
搜索路径可能包含指向Qt资源系统的路径。
entryInfoList(filters: QDir.Filters = QDir.NoFilter, sort:QDir.SortFlags= QDir.NoSort)List[QFileInfo]这是一个重载函数。
返回目录中所有文件和目录的QFileInfo对象的列表,根据之前使用setNameFilters()和setFilter()设置的名称和属性筛选器进行排序,并根据使用setSorting()设定的标志进行排序。
可以使用筛选器和排序参数重写属性筛选器和排序规范。
如果目录不可读、不存在或没有符合规范的内容,则返回一个空列表。
entryInfoList(Sequence[nameFilters],filters,sort)List[QFileInfo]返回目录中所有文件和目录的QFileInfo对象的列表,根据之前使用setNameFilters()和setFilter()设置的名称和属性筛选器进行排序,并根据使用setSorting()设定的标志进行排序。
名称筛选器、文件属性筛选器和排序规范可以使用nameFilters、筛选器和排序参数重写。
如果目录不可读、不存在或没有符合规范的内容,则返回一个空列表。
entryList(filters=QDir.Filter.NoFilter[, sort=QDir.SortFlag.NoSort])List[str]这是一个重载函数。
返回目录中所有文件和目录的名称列表,根据之前使用setNameFilters()和setFilter()设置的名称和属性筛选器进行排序,并根据使用setSorting()设定的标志进行排序。
可以使用筛选器和排序参数重写属性筛选器和排序规范。
如果目录不可读、不存在或没有符合规范的内容,则返回一个空列表。
要列出指向不存在文件的符号链接,必须将System传递给筛选器。
entryList(Sequence[nameFilters],filters,sort)List[str]根据过滤器和排序规则,获取路径下的所有文件信息和子路径信息
setNameFilters()list of strings将entryList()和entryInfoList()使用的名称筛选器设置为nameFilters指定的筛选器列表。
每个名称过滤器都是一个通配符(globbing)过滤器,可以理解和?通配符。请参见通配符()。
例如,以下代码在QDir上设置了三个名称过滤器,以确保只列出扩展名通常用于C++源文件的文件:
filters = QStringList()
filters << "
.cpp" << “.cxx" << ".cc”
dir.setNameFilters(filters)
nameFilters()list of strings返回由setNameFilters()设置的字符串列表
[static]home()QDir返回用户的主目录。
目录是使用主目录的绝对路径构建的,确保其path()与absolutePath()相同。
有关详细信息,请参见homePath()。
[static]homePath()str返回用户主目录的绝对路径。
在Windows下,此函数将返回当前用户配置文件的目录。通常情况下,这是:
C:/Users/Username
使用toNativeSeparators()函数将分隔符转换为适合底层操作系统的分隔符。
如果当前用户配置文件的目录不存在或无法检索,则将检查以下备选方案(按给定顺序),直到找到现有的可用路径:
- USERPROFILE环境变量指定的路径。
- 通过串联HOMEDRIVE和HOMEPATH环境变量形成的路径。
- HOME环境变量指定的路径。
- rootPath()函数(使用SystemDrive环境变量)返回的路径
- C:/目录。
在非Windows操作系统下,如果HOME环境变量存在,则使用该变量,否则使用rootPath()返回的路径。
[static]isAbsolute()bo0l如果目录的路径是绝对路径,则返回true;否则返回false。请参见isAbsolutePath()。
[static]isAbsolutePath(path: str)bool如果路径是绝对的,则返回true;如果是相对的,则返回false。
isRelative()bool如果目录路径是相对路径,则返回true;否则返回false。(在Unix下,如果路径不是以"/"开头,则路径是相对的)。
[static]isRelativePath(path:str)bool如果路径是相对的,则返回true;如果是绝对值,则返回false。
isRoot()bool如果目录是根目录,则返回true;否则返回false。
如果目录是指向根目录的符号链接,此函数将返回false。如果您想测试这一点,请使用canonicalPath(),例如。
dir = QDir(“/tmp/root_link”)
dir = dir.canonicalPath()
if dir.isRoot():
qWarning(“It is a root link”)
isEmpty(filters= QDir.NoDotAndDotDot)bool返回目录是否为空。
相当于count()==0,带有筛选器`QDir::AllEntries
isReadable()bool如果目录可读并且我们可以按名称打开文件,则返回true;否则返回false。
此函数中的错误值不能保证目录中的文件不可访问。
[static]listSeparator()str返回本机路径列表分隔符:Unix下的":“和”;"在Windows下。
makeAbsolute()bool将目录路径转换为绝对路径。如果它已经是绝对的,什么也不会发生。如果转换成功,则返回true;否则返回false。
mkdir(str)bool这是一个重载函数。
使用默认权限创建一个名为dirName的子目录。
在POSIX系统上,默认情况是授予umask允许的所有权限。在Windows上,新目录从其父目录继承其权限。
mkpath(str)bool创建目录路径dirPath。
该函数将创建创建目录所需的所有父目录。
如果成功,则返回true;否则返回false。
如果调用此函数时路径已经存在,则它将返回true。
refresh()None刷新目录信息。
relativeFilePath(fileName;str)Str返回fileName相对于目录的路径。
dir = QDir(“/home/bob”)
s = QString()
s = dir.relativeFilePath(“images/file.jpg”)# s is “images/file.jpg”
s = dir.relativeFilePath(“/home/mary/file.txt”)# s is “…/mary/file.txt”
remove(fileName:str)bool删除文件fileName。
如果成功删除文件,则返回true;否则返回false。
removeRecursively()bool删除目录,包括其所有内容。
如果成功,则返回true,否则返回false。
如果无法删除文件或目录,removeRecursively()会继续执行并尝试删除尽可能多的文件和子目录,然后返回false。
如果目录已被删除,则该方法返回true(已达到预期结果)。
此函数用于删除小型应用程序内部目录(如临时目录),但不删除用户可见的目录。对于用户可见的操作,建议更准确地向用户报告错误,在出现错误时提供解决方案,显示删除过程中的进度,因为这可能需要几分钟时间,等等。
rename(oldName: str,newName: str)bool将文件或目录从oldName重命名为newName,如果成功,则返回true;否则返回false。
在大多数文件系统上,只有当oldName不存在,或者具有新名称的文件已经存在时,rename()才会失败。然而,rename()可能失败还有其他原因。例如,在至少一个文件系统上,如果newName指向打开的文件,rename()将失败。
如果oldName是一个无法立即重命名的文件(而不是目录),Qt将尝试将oldName复制到newName并删除oldName。
exists(name:str)bool如果名为name的文件存在,则返回true;否则返回false。
除非name包含绝对文件路径,否则文件名将被假定为相对于目录本身,因此此函数通常用于检查目录中是否存在文件。
exists()bool这是一个重载函数。
如果目录存在,则返回true;否则返回false。(如果找到具有相同名称的文件,此函数将返回false)。
接受参数的此函数的重载用于测试目录中是否存在文件和目录。
filePath(fileName:str)str返回目录中文件的路径名。不检查该文件是否实际存在于目录中;但请参阅exists()。如果QDir是相对的,那么返回的路径名也将是相对的。不会删除fileName中多余的多个分隔符或".“和”…"目录(请参阅cleanPath())。
rmdir(dirName;str)bool移除路径,成功则返回True
rmpath(dirPath:str)bool删除目录路径dirPath。
该函数将删除dirPath中的所有父目录,前提是它们为空。这与mkpath(dirPath)相反。
如果成功,则返回true;否则返回false。
__ne__(dir:PySide6.QtCore.QDir)bool如果目录dir和此目录具有不同的路径或不同的排序或筛选器设置,则返回true;否则返回false。
例子:
# The current directory is “/usr/local”
d1 = QDir(“/usr/local/bin”)
d1.setFilter(QDir.Executable)
d2 = QDir(“bin”)
if d1 != d2:
qDebug(“They differ”)
__eq__(dir:PySide6.QtCore.QDir)bool如果目录dir和此目录具有相同的路径,并且它们的排序和筛选器设置相同,则返回true;否则返回false。
例子:
# The current directory is “/usr/local”
d1 = QDir(“/usr/local/bin”)
d2 = QDir(“bin”)
if d1 == d2:
qDebug(“They’re the same”)
[static]cleanPath(path)Str返回路径,其中目录分隔符已规范化(即平台本机分隔符已转换为"/“),冗余分隔符已删除,”.“s和”…“s已解析(尽可能)。
保留符号链接。此函数不返回规范路径,而是返回输入的最简单版本。例如,”./local"变成"local",“local/…/bin"变成"bin”,“/local/usr/…/bin"变为”/local/bin"。
[static]root()QDir返回根目录。
目录是使用根目录的绝对路径构建的,确保其path()与absolutePath()相同。
有关详细信息,请参阅rootPath()。
[static]rootPath()str返回根目录的绝对路径。
对于Unix操作系统,返回"/“。对于Windows文件系统,这通常会返回"c:/”。
[static]separator()str返回本机目录分隔符:Unix下为"/“,Windows下为”“。
您不需要使用此函数来构建文件路径。如果您总是使用”/",Qt将转换您的路径以符合底层操作系统。如果要使用操作系统的分隔符显示用户的路径,请使用toNativeSeparators()。
[static]setCurrent(str)bool将应用程序的当前工作目录设置为路径。如果目录已成功更改,则返回true;否则返回false。
absolute = “/local/bin”
relative = “local/bin”
absFile = QFileInfo(absolute)
relFile = QFileInfo(relative)
QDir.setCurrent(QDir.rootPath())
# absFile and relFile now point to the same file
QDir.setCurrent(“/tmp”)
# absFile now points to “/local/bin”,
# while relFile points to “/tmp/local/bin”
[static]current()QDir返回应用程序的当前目录。
目录是使用当前目录的绝对路径构建的,确保其path()与absolutePath()相同。
[static]currentPath()str返回应用程序当前目录的绝对路径。当前目录是使用setCurrent()设置的最后一个目录,如果从未调用过,则是父进程启动此应用程序的目录。
[static]temp()QDir返回系统的临时目录。
目录是使用临时目录的绝对规范路径构建的,确保其path()与absolutePath()相同。
有关详细信息,请参见tempPath()。
[static]tempPath()str返回系统临时目录的绝对规范路径。
在Unix/Linux系统上,这是TMPDIR环境变量中的路径,如果未定义TMPDIR,则为/tmp。在Windows上,这通常是TEMP或TMP环境变量中的路径。此方法返回的路径不会以目录分隔符结束,除非它是(驱动器的)根目录。
[static]fromNativeSeparators(pathName:str)str使用"/“作为文件分隔符返回pathName。例如,在Windows上,fromNativeSeparators(“c:\winnt\system32”)返回"c:/winnt/system32”。
返回的字符串可能与某些操作系统上的参数相同,例如在Unix上。
[static]toNativeSeparators(pathName: str)str返回pathName,其中"/“分隔符已转换为适用于基础操作系统的分隔符。
在Windows上,toNativeSeparators(“c:\winnt/system32”)返回"c:\winn\system32”。
返回的字符串可能与某些操作系统上的参数相同,例如在Unix上。
[static]addSearchPath(prefix:str, path:str)将路径添加到前缀的搜索路径中。
[static]match(filter: str, fileName: str)bool如果fileName与通配符(glob)模式筛选器匹配,则返回true;否则返回false。过滤器可能包含多个由空格或分号分隔的模式。匹配不区分大小写。
[static]match(filter:List[str], fileName: str)bool这是一个重载函数。
如果fileName与筛选器列表中的任何通配符(glob)模式匹配,则返回true;否则返回false。匹配不区分大小写。
[static]nameFiltersFromString(nameFilter:str)List[str]
[static]searchPaths(prefix:str)List[str]返回前缀的搜索路径。
路径管理Dir的应用实例

下面的程序,单击"文件"菜单下的选择路径,从路径选择对话框中选择一个路径后,将列出该路径下所有文件的文件名、文件大小创建日期和修改日期信息。

image-20230311175325911

# -*- coding: UTF-8 -*-
# File date: Hi_2023/3/11 17:39
# File_name: 06-路径管理Dir的应用实例.py


from PySide6.QtWidgets import QApplication,QMainWindow,QPlainTextEdit,QFileDialog
from PySide6.QtCore import QDir
import sys


class MyWindow(QMainWindow):
    def __init__(self,parent=None):
        super().__init__(parent)

        self.resize(800,600)
        self.setupUI()# 界面

    def setupUI(self):  # 界面建立
        self.plainText = QPlainTextEdit()
        self.setCentralWidget(self.plainText)
        self.status = self.statusBar()
        self.menubar = self.menuBar()# 菜单栏

        self.file = self.menubar.addMenu('文件')# 文件菜单
        action_dir = self.file.addAction('选择路径')# 动作
        action_dir.triggered.connect(self.action_dir_triggered)

        self.file.addSeparator()

        action_close = self.file.addAction('关闭')
        action_close.triggered.connect(self.close)

    def action_dir_triggered(self):
        path = QFileDialog.getExistingDirectory(self,caption="选择路径")
        dir = QDir(path)
        dir.setFilter(QDir.Files)# 只显示文件
        if dir.exists(path):
            template ="文件名:{} 文件大小:{}字节  创建日:{}   修改日期:{}"
            fileInfo_list = dir.entryInfoList()# 获取文件信息列表
            n = len(fileInfo_list)# 文件数量
            if n:  # 如果路径下有文件
                self.status.showMessage("选择的路径是:"+ dir.toNativeSeparators(path)+"该路径下有"+ str(n)+"个文件")
                self.plainText.clear()
                self.plainText.appendPlainText(dir.toNativeSeparators(path)+"下的文件如下:")
                for info in fileInfo_list:
                    string = template.format(info.fileName(),info.size(),info.birthTime().toString(),info.lastModified().toString())
                    self.plainText.appendPlainText(string)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MyWindow()

    win.show()
    sys.exit(app.exec())

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日,当挖目相待

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值