2014-05-20 2 views
1

Je voudrais écrire une application simple qui me dit quand un fichier a été modifié.Surveillance de l'intégrité du fichier

Est-ce que la classe <QFileSystemWatcher> surveille uniquement les modifications lorsque le programme est en cours d'exécution?

Si oui, existe-t-il d'autres classes que je peux utiliser pour la surveillance de l'intégrité des fichiers?

+0

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

Répondre

1

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.

+0

Portée MyClass manquante pour la fonction checkIntegrity; O) – TheDarkKnight

+0

@ Merlin069: J'écris habituellement l'exemple pour l'en-tête inline parce que si j'écris le cpp, les utilisateurs ont tendance à demander des problèmes avec l'en-tête, donc il est plus autonome. J'allais faire la classe d'en-tête, mais j'ai été convoqué à une réunion. : P Va le faire maintenant. Merci pour le rappel que ce n'est pas complet. :) – lpapp