Вы можете запустить md5sum и т. Д. С помощью QProcess, а затем для измененных сигналов и сравнения.
Альтернативой является чтение всего файла или mmap и создание вашего хеша с помощью QCryptoGraphicHash.
В любом случае, вы сделаете это сначала, а затем в обработчиках сигналов, слоты a.k.a., как только соединение будет правильно выполнено в вашем подклассе 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;
};
Отказ от ответственности: Это, очевидно, никоим образом не испытанного, вообще, но я надеюсь, что она демонстрирует концепцию.
Да, он будет отслеживать только, когда ваша программа запущена, но, как указано в @LaszloPapp, вы можете получить хэш файла (ов) и сохранить их, а затем проверить, изменились ли они, когда ваша программа запускается. В качестве альтернативы, создайте службу (Windows) или демон (OSX/Linux), чтобы работать все время и контролировать файлы. – TheDarkKnight