104-数据读写和文件管理-数据读写基本类-文件和路径监视QFileSystemWatcher

文件和路径监视QFileSystemWatcher

QFileSystemWatcher 是文件和路径监视器当被监视的文件或路径发生修改、添加和删除等变化时会发送相应的信号,被监视的文件和路径一般不超过 256 个。

用QFileSystemWatcher定义文件监视器对象的方法如下所示,其中 parent是继承自QObject类的实例对象;Sequence[str]是字符串列表,是被监视的文件或路径

from PySide6.QtCore import QFileSystemWatcher

QFileSystemWatcher(parent: Union[PySide6.QtCore.QObject,NoneType]= None)-> None
QFileSystemWatcher(paths: Sequence[str],parent: Union[PySide6.QtCore.QObject,NoneType]= None)-> None
QFileSystemWatcher官方说明

QFileSystemWatcher通过监视指定路径的列表来监视文件系统对文件和目录的更改。
调用addPath()来监视特定的文件或目录。可以使用addPaths()函数添加多个路径。可以使用removePath()和removePaths()函数删除现有路径。
QFileSystemWatcher会检查添加到它的每个路径。可以使用Files()函数访问已添加到QFileSystemWatcher的文件,使用directories()函数可以访问目录。
当文件被修改、重命名或从磁盘中删除时,会发出fileChanged()信号。类似地,当修改或删除目录或其内容时,会发出directoryChanged()信号。请注意,一旦文件被重命名或从磁盘中删除,QFileSystemWatcher就停止监视文件,一旦目录被从磁盘中移除,QFileSystem Watcher就会停止监视目录。

  • 在运行没有inotify支持的Linux内核的系统上,无法卸载包含监视路径的文件系统。
  • 监视文件和目录以进行修改的行为会消耗系统资源。这意味着进程可以同时监视的文件和目录的数量是有限制的。例如,在所有BSD变体上,每个被监控的文件都需要一个打开的文件描述符。某些系统默认情况下将打开的文件描述符的数量限制为256个。这意味着,如果进程试图向文件系统监视器添加超过256个文件或目录,那么addPath()和addPaths()将失败。还要注意,除了要监视的文件的描述符之外,您的进程可能还打开了其他文件描述符,并且这些其他打开的描述符也会计入总数。macOS使用不同的后端,因此不会出现此问题。
QFileSystemWatcher方法

QFileSystemWatcher 的方法如表 所示。

  • 用addPath(file:str)方法或 addPaths(files:Seguence[str])方法添加被监视的路径或文件;
  • 用removePath(file:str)方法或removePaths(files:Sequence[str])方法移除被监视的文件或路径;
  • 用directories()方法获取被监视的路径列表;
  • 用files()方法获取被监视的文件列表。当被监视的路径发生改变(增加和删除文件及路径)或文件发生改变(修改、重命名、删除)时,会分别发送directoryChanged(path)信号和 fileChanged(fileName)信号。
QFileSystemWatcher的方法返回值的类型说明
addPath(file:str)bool如果路径存在,则向文件系统观察程序添加路径。如果路径不存在,或者文件系统观察程序已经在监视该路径,则不会添加该路径。
如果path指定了一个目录,那么当path被修改或从磁盘中删除时,会发出directoryChanged()信号;否则,在修改、重命名或删除路径时会发出fileChanged()信号。
如果手表成功,则返回true。
监视失败的原因通常取决于系统,但可能包括不存在的资源、访问失败或总监视计数限制(如果平台有)。
可以同时监控的文件和目录的数量可能存在与系统相关的限制。如果已达到此限制,则不会监视路径,并返回false。
addPaths(files: Sequence[str])ListEstr]将路径中的每个路径添加到文件系统观察程序。如果路径不存在,或者已经被文件系统观察程序监视,则不会添加路径。
如果路径指定了一个目录,则在修改路径或从磁盘中删除路径时会发出directoryChanged()信号;否则,在修改、重命名或删除路径时会发出fileChanged()信号。
返回值是一个无法监视的路径列表。
监视失败的原因通常取决于系统,但可能包括不存在的资源、访问失败或总监视计数限制(如果平台有)。
可以同时监控的文件和目录的数量可能存在与系统相关的限制。如果已达到此限制,则不会监视多余的路径,并将它们添加到返回的QStringList中。
directories()List[str]返回正在监视的目录的路径列表。
files()List[str]返回正在监视的文件的路径列表。
removePath(file:str)bool从文件系统观察程序中删除指定的路径。
如果手表被成功移除,则返回true。
手表删除失败的原因通常取决于系统,但可能是由于路径已被删除,例如。
removePaths(files:Sequence[str])List[str]从文件系统观察程序中删除指定的路径。
返回值是无法成功解锁的路径列表。
手表删除失败的原因通常取决于系统,但可能是由于路径已被删除,例如。
QFileSystemWatcher信号
信号描述
directoryChanged(path:str)当指定路径上的目录被修改(例如,当添加或删除文件时)或从磁盘中删除时,会发出此信号。请注意,如果在短时间内有几个变化,其中一些变化可能不会发出此信号。然而,变化序列中的最后一个变化将始终生成该信号。
fileChanged(path:str)当指定路径的文件被修改、重命名或从磁盘中删除时,会发出此信号。
作为一种安全措施,许多应用程序通过写入新文件然后删除旧文件来保存打开的文件。在slot函数中,您可以检查watcher.files().contents(path)。如果返回false,请检查该文件是否仍然存在,然后调用addPath()继续监视它。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

士别三日,当挖目相待

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

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

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

打赏作者

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

抵扣说明:

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

余额充值