Vous pouvez exécuter md5sum, etc. avec QProcess initialement et ensuite pour les signaux modifiés et comparer.
L'alternative est de lire tout le fichier ou mmap et de créer votre hachage avec QCryptoGraphicHash.
Dans les deux cas, vous le feriez d'abord, puis dans les gestionnaires de signaux, c'est-à-dire une fois la connexion correctement établie dans votre sous-classe 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;
};
Avertissement: Ceci est évidemment en aucune façon testé, que ce soit, mais j'espère que cela démontre le concept.
Oui, il surveille uniquement lorsque votre programme est en cours d'exécution, mais comme l'indique @LaszloPapp, vous pouvez obtenir un hachage du ou des fichiers et les stocker, puis vérifier s'ils ont changé au démarrage suivant du programme. Vous pouvez également créer un service (Windows) ou un démon (OSX/Linux) pour exécuter tout le temps et surveiller le (s) fichier (s). – TheDarkKnight