用QFileSystemWatcher来监视文件和目录的改变(内部还是使用了timer)

Use Case: 两个程序共享同一个Configuration文件,当一个程序作出改变的时候,需要另外一个程序能够及时响应。

之前其实猜的八九不离十,估计是有一个Timer,然后定时查询Configuration文件是否改变。

今天兴趣来了,正好一看,果然,同时也感慨Qt之博大精深。

废话莫谈,那我们就看看内部机制吧:

-----------------------------------------------------

Qt提供了QFileSystemWatcher类来监视文件和目录的改变。

addPath/addPaths:

设置需要监视的文件和目录

removePath/removePaths:

移除不需要监视的目录.

Signals:

当监视的文件被修改或删除时,产生一个fileChanged()信号。

如果被监视的目录被改变或删除,产生 directoryChanged()信号。

Q_SIGNALS:void fileChanged(const QString &path);void directoryChanged(const QString &path);

来源:

Timer:

void QPollingFileSystemWatcherEngine::run(){    QTimer timer;    connect(&timer, SIGNAL(timeout()), SLOT(timeout()));    timer.start(PollingInterval);    (void) exec();}

文件比较,基本上就看文件属性有没有改变:

class FileInfo    {uint ownerId;uint groupId;        QFile::Permissions permissions;        QDateTime lastModified;        QStringList entries;

public:        FileInfo(const QFileInfo &fileInfo)            : ownerId(fileInfo.ownerId()),              groupId(fileInfo.groupId()),              permissions(fileInfo.permissions()),              lastModified(fileInfo.lastModified())        { if (fileInfo.isDir()) {                entries = fileInfo.absoluteDir().entryList(QDir::AllEntries);            }        }        FileInfo &operator=(const QFileInfo &fileInfo)        {            *this = FileInfo(fileInfo);return *this;        }

bool operator!=(const QFileInfo &fileInfo) const        {if (fileInfo.isDir() && entries != fileInfo.absoluteDir().entryList(QDir::AllEntries))return true;return (ownerId != fileInfo.ownerId()                    || groupId != fileInfo.groupId()                    || permissions != fileInfo.permissions()                    || lastModified != fileInfo.lastModified());        }    };

http://www.xuebuyuan.com/363908.html

时间: 2025-01-05 04:27:01

用QFileSystemWatcher来监视文件和目录的改变(内部还是使用了timer)的相关文章

在使用Eclipse时出现的两个问题:“搞定 NiosII 工程文件夹目录路径改变”与“Connected system ID hash not found on target at expected base address”

问题一: “搞定 NiosII 工程文件夹目录路径改变”的过程中,按照<NiosII的奇幻漂流-v2.0.pdf>这本书附录一章<20.2 四步搞定 NiosII 工程文件夹目录路径改变>所说的方法进行问题解决的时候,总是会出现一些小问题,例如有一个问题“xxx.sopcinfo could not be found.”最后只能删掉工程,重建project,copy源码.虽然最后能够解决路径问题,但花费精力过多,无数次的删除原工程下的project,无数次的自己重建,虽然也能解决问

Linux常用命令(3)-文件和目录管理

(1).Linux 文件权限和目录配置 Linux 文件分三种身份 owner.group.others. 三种权限 read.write.execute #ls -al drwxr-xr-x   1     root   root  4230  2012-09-12 17:21 jdk-7u7 对应文件权限  连接数    用户组  用户 文件大小  最后修改日期      文件名 其中[d] 表示为目录 [-] 表示为文件 文件类型和权限三个为一组,总共三组,其中第一组是文件所有者权限,第二

文件或目录的权限chmod,chown更改所有者和所属组,umask及隐藏权限

文件或目录的权限chmod -rwxr--r--. 1 root root 0 6月 8 20:22 2.txt 可读(r)可写(w)可执行(x),第一段是所有者,第二段是所属组,第三段是其他人 r=4,w=2,x=1.rwx=7,rw-=6, --x=1,rw-r--r--=644, rw-r-xr-x=655 chmod === change mode改变权限 如:rwx------=700 chmod 700 2.txt [[email protected] ~]# chmod 700 2

[Java 8] 列举目录下的所有文件和监视文件变化

列举目录中的所有文件 首先给出代码: Files.list(Paths.get(".")).forEach(System.out::println); Files.list方法得到的是一个Stream类型的对象,它代表了目标路径下所有的文件.如果只想获取目标路径下的所有目录文件: Files.list(Paths.get(".")) .filter(Files::isDirectory) .forEach(System.out::println); 在以前的Java

Node.js文件模块fs监视文件变化

Node.js文件模块fs监视文件变化 Node中文件模块fs监视文件的函数源码如下: fs.watch = function(filename) { nullCheck(filename); var watcher; var options; var listener; if (util.isObject(arguments[1])) { options = arguments[1]; listener = arguments[2]; } else { options = {}; listen

利用inotifywait监控主机文件和目录

利用inotifywait监控主机文件和目录 inotifywait 是一个可以实时监控文件变动的工具,它利用linux内核中的inotify机制实现监控功能. 查看内核版本 [[email protected]Oracle ~]# uname -r 2.6.32-220.el6.i686 安装inotify-tools yum install -y inotify-tools 测试监控/etc,inotifywait -m /etc 用putty连接服务器,开启另一个终端,用vim编辑/etc

Linux文件和目录管理常用命令(中)

ln 命令 描述:ln命令用来为文件创建连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接.如果要创建符号连接必须使用"-s"选项. 注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的. 语法:ln(选项)(参数) 常用选项: -b或--backup              删除,覆盖目标文件之前的备份: -d或-F或--directory     建立目录的硬连接: -f或--force             强

图解SSIS监视文件夹并自动导入数据

原文:图解SSIS监视文件夹并自动导入数据 演示案例:让系统自动监视文件夹,并把文件夹下面的excel文件导入到sql中,之后清空目录.这个过程以往都需要写程序来实现或者定时执行,现在可以用ssis来订制任务完成. 在阅读本文之前,你先要学会如何用ssis来批量导入数据,可以参考我先前的blog文章,这里我们用相同的数据交换背景来演示.http://blog.csdn.net/jinjazz/archive/2008/07/25/2710169.aspx 1.建立测试环境,目录为F:/excel

umask值与Linux中文件和目录权限的关系

umask值与文件和目录的权限 1.1 -R参数设置目录权限(chmod) 1.2 权限字母说明 1.3umask说明 1.umask的值决定着文件和目录的权限,创建文件默认最大权限为666(-rw-rw-rw-),默认创建的文件没有可执行权限x位. 2.对于文件来说,umask的设置是在假定文件拥有八进制666的权限上进行的,文件的权限就是666减去umask(umask的各个位数字也不能大于6,如,077就不符合条件)的掩码数值:重点在接下来的内容,如果umask的部分位或全部位为奇数,那么