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

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

猜你喜欢

转载自blog.csdn.net/lengyuezuixue/article/details/81105749