QFileSystemWatcher 类

QFileSystemWatcher 类提供了一个接口,用于监控文件和目录的修改。 更多信息...

头文件 #include <QFileSystemWatcher>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core
继承 QObject

注意:本类中所有函数都是重入的。

公有函数

QFileSystemWatcher(QObject *parent = nullptr)
QFileSystemWatcher(const QStringList &paths, QObject *parent = nullptr)
virtual~QFileSystemWatcher()
booladdPath(const QString &path)
QStringListaddPaths(const QStringList &paths)
QStringListdirectories() const
QStringListfiles() const
boolremovePath(const QString &path)
QStringListremovePaths(const QStringList &paths)

信号

voiddirectoryChanged(const QString &path)
voidfileChanged(const QString &path)

详细信息

QFileSystemWatcher 通过监视指定路径列表来监控文件系统和目录的更改。

调用 addPath() 来监视特定文件或目录。可以使用 addPaths() 函数添加多个路径。可以通过使用 removePath() 和 removePaths() 函数来移除现有路径。

QFileSystemWatcher 会检查添加到其中的每个路径。可以通过 files() 函数访问已添加到 QFileSystemWatcher 的文件,并使用 directories() 函数访问目录。

当文件在磁盘上被修改、重命名或删除时,会发出 fileChanged() 信号。同样,当目录或其内容被修改或删除时,会发出 directoryChanged() 信号。请注意,一旦文件被重命名或从磁盘删除,QFileSystemWatcher 就会停止监控文件,一旦目录被从磁盘删除,就会停止监控目录。

  • 注意:
    • 在运行没有 inotify 支持的 Linux 内核的操作系统上,无法卸载包含监视路径的文件系统。
    • 监控文件和目录的修改会消耗系统资源。这意味着您的过程可以同时监控的文件和目录数量有限制。例如,在所有BSD变体中,每个被监控的文件都需要一个打开的文件描述符。某些系统默认将打开文件描述符的数量限制为256。这意味着,如果您的进程尝试将超过256个文件或目录添加到文件系统监控中,addPath() 和 addPaths() 将失败。此外,请注意,您的进程除了正在监控的文件外的其他文件描述符可能也已打开,这些其他打开描述符也会计入总数。macOS使用不同的后端,不受到这个问题的影响。

另见QFileQDir

成员函数文档

QFileSystemWatcher::QFileSystemWatcher(QObject *parent = nullptr)

使用给定的 parent 构造一个新的文件系统监控对象。

QFileSystemWatcher::QFileSystemWatcher(const QStringList &paths, QObject *parent = nullptr)

使用给定的 parent 构造一个新的文件系统监控对象,该对象监控指定的 paths 列表。

[virtual noexcept] QFileSystemWatcher::~QFileSystemWatcher()

销毁文件系统监控器。

bool QFileSystemWatcher::addPath(const QString &path)

如果 path 存在,则将其添加到文件系统监控器。如果 path 不存在或它已经在文件系统监控器中被监控,则不会添加路径。

如果 path 指定了一个目录,当 path 在磁盘上被修改或删除时,将发出 directoryChanged() 信号;否则,当 path 在磁盘上被修改、重命名或删除时,将发出 fileChanged() 信号。

如果监控成功,则返回 true。

监控失败的原因通常是系统相关的,但可能包括资源不存在、访问失败或如果平台有此限制,则达到总监控计数限制。

注意:系统中可能有一个与文件和目录可以同时监控的数量相关的系统依赖限制。如果达到这一限制,path 将不会被监控,并返回 false。

另见addPaths() 和 removePath

QStringList QFileSystemWatcher::addPaths(const QStringList &paths)

paths 中的每个路径添加到文件系统监控器。如果路径不存在或它已经在文件系统监控器中被监控,则不会添加路径。

如果路径指定了一个目录,在路径在磁盘上被修改或删除时将发出 directoryChanged() 信号;否则,在路径被修改、重命名或删除时将发出 fileChanged() 信号。

返回值是列表中不能被监控的路径。

监控失败的原因通常是系统相关的,但可能包括资源不存在、访问失败或如果平台有此限制,则达到总监控计数限制。

注意:可能存在一个系统相关的限制,即同时可监听的文件和目录数量。如果达到了这个限制,多余的 路径 将不会被监听,并将被添加到返回的 QStringList 中。

参见:addPath() 和 removePaths

QStringList QFileSystemWatcher::directories() const

返回正在被监听的目录路径列表。

参见:files

[私有信号] void QFileSystemWatcher::directoryChanged(const QString &path)

当指定 路径 所在的目录被修改(例如添加或删除文件)或从硬盘中移除时,会发出此信号。请注意,如果在短时间内有多个变化,某些变化可能不会发出此信号。然而,在一系列变化的最后,总会生成这个信号。

注意:这是一个私有信号。它可以在信号连接中使用,但不能由用户发出。

参见:fileChanged

[私有信号] void QFileSystemWatcher::fileChanged(const QString &path)

当指定 路径 所在的文件被修改、重命名或从硬盘中移除时,会发出此信号。

注意:作为一个安全措施,许多应用程序在保存打开的文件时会先写入一个新文件,然后删除旧的一个。在您的槽函数中,您可以通过检查 watcher.files().contains(path) 来确定。如果它返回 false,请检查该文件是否仍然存在,然后调用 addPath() 以继续监视它。

注意:这是一个私有信号。它可以在信号连接中使用,但不能由用户发出。

参见:directoryChanged

QStringList QFileSystemWatcher::files() const

返回正在被监听的文件路径列表。

参见:directories

bool QFileSystemWatcher::removePath(const QString &path)

从文件系统监视器中移除指定的 路径

如果监视成功移除,则返回 true。

监视移除失败的原因通常是系统相关的,可能是路径已经被删除等原因。

参见:removePathsaddPath

QStringList QFileSystemWatcher::removePaths(const QStringList &paths)

从文件系统监视器中移除指定的 paths

返回值是未能成功取消监控的路径列表。

监视移除失败的原因通常是系统相关的,可能是路径已经被删除等原因。

参见:removePathaddPaths

© 2024 The Qt Company Ltd. 本文件内的文档贡献属于各自著作权人。本提供的文档在GNU自由文档许可证版本1.3的条件下获得许可,该许可证由自由软件基金会发布。Qt及其相关标志为The Qt Company Ltd.在芬兰及其它国家和地区注册的商标。所有其他商标属于各自权利人。