我想写一个简单的应用程序,告诉我文件何时被修改。
<QFileSystemWatcher>
类是否仅在程序运行时监视更改?
如果是这样,是否还有其他可用于文件完整性监控的类?
答案 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;
};
免责声明:这显然没有经过任何方式测试,但我希望它能够证明这一概念。