zoukankan      html  css  js  c++  java
  • [Qt]用QFileSystemWatcher来监视文件和目录的改变

    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

  • 相关阅读:
    企业网盘针对文件权限管理的技术实现
    学校私有云盘在学校信息化建设中的作用-教学资源库平台
    Mobox 知识管理平台助推市长质量奖
    为勇敢的华裔女子点赞
    一群喵星人把他家包围了。。
    【OI】简单的分块
    【OI】Kruskal & ufs (克鲁斯卡与并查集)
    【OI】向量&矩阵乘法
    【OI】同余方程
    【Ubuntu】某灯图标过大
  • 原文地址:https://www.cnblogs.com/piaoger/p/2267356.html
Copyright © 2011-2022 走看看