2014-05-20 10 views
1

Я хотел бы написать простое приложение, которое сообщает мне, когда файл был изменен.Контроль целостности файла

Изменяется ли только монитор <QFileSystemWatcher>, когда программа запущена?

Если да, есть ли другие классы, которые я могу использовать для мониторинга целостности файлов?

+0

Да, он будет отслеживать только, когда ваша программа запущена, но, как указано в @LaszloPapp, вы можете получить хэш файла (ов) и сохранить их, а затем проверить, изменились ли они, когда ваша программа запускается. В качестве альтернативы, создайте службу (Windows) или демон (OSX/Linux), чтобы работать все время и контролировать файлы. – TheDarkKnight

ответ

1

Вы можете запустить 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; 
}; 

Отказ от ответственности: Это, очевидно, никоим образом не испытанного, вообще, но я надеюсь, что она демонстрирует концепцию.

+0

Отсутствует область MyClass для функции checkIntegrity; O) – TheDarkKnight

+0

@ Merlin069: Обычно я пишу пример для встроенного заголовка, потому что, если я пишу cpp, пользователи, как правило, задают проблемы с заголовком, поэтому он более автономный. Я собирался добавить шаблон заголовка класса, но меня вызвали на собрание. : P Сделай это сейчас. Спасибо за напоминание, что он не завершен. :) – lpapp