监控文件完整性

时间:2014-05-20 15:58:22

标签: c++ qt qtcore qt-signals qfilesystemwatcher

我想写一个简单的应用程序,告诉我文件何时被修改。

<QFileSystemWatcher>类是否仅在程序运行时监视更改?

如果是这样,是否还有其他可用于文件完整性监控的类?

1 个答案:

答案 0 :(得分:1)

您最初可以使用QProcess运行md5sum等,然后运行已更改的信号并进行比较。

另一种方法是读取或mmap中的所有文件,并使用QCryptoGraphicHash创建哈希。

无论哪种方式,一旦在QObject子类中正确建立连接,你最初会在信号处理程序,a.k.a。插槽中执行此操作。

#include <QObject>
#include <QFileSystemWatcher>

class MyClass : public QObject
{
    Q_OBJECT
    public:
        explicit MyClass(QObject *parent = Q_NULLPTR)
            : QObject(parent)
        {
            // ...
            connect(m_fileSystemWatcher, SIGNAL(fileChanged(const QString&)), SLOT(checkIntegrity(const QString&)));
            // ...
        }

    public slots:
        void checkIntegrity(const QString &path)
        {
            // 1a. Use QProcess with an application like md5sum/sha1sum
            // OR
            // 1b. Use QFile with readAll() QCryptoGraphicsHash
            // 2. Compare with the previous
            // 3. Set the current to the new
        }

    private:
        QFileSystemWatcher m_fileSystemWatcher;
};

免责声明:这显然没有经过任何方式测试,但我希望它能够证明这一概念。