[Qt]用QFileSystemWatcher来监视文件和目录的改

系统 1860 0

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() );
}
};

 

- Piaoger

 

[Qt]用QFileSystemWatcher来监视文件和目录的改变


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论