【问题标题】:Monitoring file integrity监控文件完整性
【发布时间】:2014-05-20 15:58:22
【问题描述】:

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

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

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

【问题讨论】:

  • 是的,它只会监控你的程序何时运行,但正如@LaszloPapp 所说,你可以获取文件的哈希值并存储它们,然后验证它们是否在你的程序运行时发生了变化程序接下来启动。或者,创建一个服务 (Windows) 或守护程序 (OSX / Linux) 以始终运行并监控文件。

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


【解决方案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;
};

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

【讨论】:

  • 缺少用于 checkIntegrity 函数的 MyClass 范围;O)
  • @Merlin069:我通常为内联标题编写示例,因为如果我编写 cpp,用户往往会询问标题的问题,因此它更加独立。我打算添加标题类样板,但我被召集参加会议。 :P 现在会这样做。感谢您的提醒,它不完整。 :)
猜你喜欢
  • 2013-02-02
  • 2023-01-27
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多