zoukankan      html  css  js  c++  java
  • 用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

  • 相关阅读:
    mysql 递归查找菜单节点的所有子节点
    mapStruct笔记
    JavaBean映射工具dozer学习
    常见Bean映射工具分析评测及Orika介绍
    Java 实体-实体的映射框架
    实体类与实体DTO类之间的转换
    推荐一个 Java 实体映射工具 MapStruct
    java Web项目Service层通用接口和entityVo对象与entity对象转化问题的解决方案
    SpringData JPA进阶查询—JPQL/原生SQL查询、分页处理、部分字段映射查询
    JPA框架下使用纯粹的原生SQL
  • 原文地址:https://www.cnblogs.com/findumars/p/5554875.html
Copyright © 2011-2022 走看看