Qt扫盲-QFileSystemWatcher理论总结
迪丽瓦拉
2024-05-01 14:54:42
0

QFileSystemWatcher理论总结

    • 1. 概述
    • 2. 信号
    • 3. 注意事项

1. 概述

QFileSystemWatcher 通过监视指定路径的列表来监视文件系统对文件和目录的更改。,其实就是一个监视文件和目录发生改变的监视器,我有时候经常用,因为修改删除文件之类的的,会影响程序的一些文件视图。

调用addPath()来监视特定的文件或目录。可以使用 addPaths() 函数添加多条路径。使用 removePath() 和 removePaths() 函数可以删除已经存在的路径。
QFileSystemWatcher检查添加到其中的每个路径。添加到 QFileSystemWatcher 中的文件可以使用 Files() 函数访问,目录可以使用 directories() 函数访问。
fileChanged()信号会在文件被修改、重命名或从磁盘中删除时发出。类似地,当目录或其内容被修改或删除时,也会发出directoryChanged()信号。

注意,QFileSystemWatcher在重命名文件或从磁盘中删除后停止监视文件,在从磁盘中删除目录后停止监视目录。
这个再次监视需要我们手动把重命名的文件添加进监视的列表之内。

2. 信号

信号也是非常的简单的哈,就两个

信号含义
directoryChanged(const QString &path)这个信号会通过 path 说明是哪个路径被修改了,当指定路径上的目录被修改(例如,当文件被添加或删除)或从磁盘中删除时,会发出此信号。请注意,如果在短时间内发生了几次更改,其中一些更改可能不会发出此信号。然而,变化序列中的最后一个变化总是会产生这个信号。注意:这是一个私有信号。它可用于信号连接,但不能由用户发出。
fileChanged(const QString &path)当指定路径上的文件被修改、重命名或从磁盘中删除时,将发出此信号。

注意 :

  • 注意:
    在 使用 fileChanged() 信号时,作为安全措施,许多应用程序通过写入新文件然后删除旧文件来保存打开的文件。在你的slot函数中,你可以检查 watcher.files().contains(path)。如果返回false,检查文件是否仍然存在,然后调用addPath()继续监视它。
    注意:这是一个私有信号。它可用于信号连接,但不能由用户发出。

3. 注意事项

注:
在运行不支持inotify的Linux内核的系统上,包含被监视路径的文件系统不能卸载。
监视文件和目录的修改会消耗系统资源。这意味着进程可以同时监控的文件和目录的数量是有限制的。例如,在所有BSD变体上,每个被监控的文件都需要一个打开的文件描述符。一些系统默认限制打开的文件描述符的数量为256。这意味着,如果进程试图向文件系统监视器添加超过256个文件或目录,addPath()和addPaths()将失败。

还要注意,除了被监控文件的文件描述符之外,进程可能还打开了其他文件描述符,这些打开的文件描述符也包括在内。macOS使用不同的后端,因此没有这个问题。

相关内容