1

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

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

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

4

1 回答 1

1

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

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

无论哪种方式,您都将首先执行此操作,然后在信号处理程序中执行此操作,也就是在您的 QObject 子类中正确建立连接后的插槽。

#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;
};

免责声明:这显然没有经过任何测试,但我希望它展示了这个概念。

于 2014-05-20T15:59:53.293 回答