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

111 篇文章 9 订阅
17 篇文章 1 订阅

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

参考:

https://www.yuque.com/docs/share/bf57ebbf-0cba-419b-ad88-2b19aa0724d6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值