QT обнаруживает изменения каталогов и подпапок

Я хочу обнаружить любые изменения в каталоге, кроме подпапок:

пример: если я помещаю список в каталог D: \ dropbox, я хочу, чтобы мое приложение показывало это:

  • D: \ dropbox \ folder1 \ file1.txt удален
  • D: \ dropbox \ folder1 \ folder2 создан
  • D: \ dropbox \ public изменен

я нашел этот пример в интернете, но он показывает только простое сообщение: «каталог изменен»

пожалуйста, может ли какое-нибудь тело помочь мне?

#ifndef MYCLASS_H
#define MYCLASS_H

#include <QWidget>
#include <QMessageBox>

class MyClass : public QWidget
{
Q_OBJECT

public:
MyClass(QWidget* parent=0)
:QWidget(parent){}

~MyClass(){}

public slots:
void showModified(const QString& str)
{
Q_UNUSED(str)
QMessageBox::information(this,"Directory Modified", "Your Directory is modified");
}
};

#endif // MYCLASS_H#include <QApplication>
#include <QFileSystemWatcher>
#include <QDebug>

#include "MyClass.h"
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QFileSystemWatcher watcher;
watcher.addPath("C:/QtTest");

QStringList directoryList = watcher.directories();
Q_FOREACH(QString directory, directoryList)
qDebug() << "Directory name" << directory <<"\n";

MyClass* mc = new MyClass;

QObject::connect(&watcher, SIGNAL(directoryChanged(QString)), mc, SLOT(showModified(QString)));

return app.exec();
}

1

Решение

я нашел этот пример в интернете, но он показывает только простое сообщение: «каталог изменен»

Correct, Qt и QFileSystemWatcher не могут сделать больше для вас на данный момент. Вы можете прочитать больше о планах по расширению поддержки, но ее пока нет:

http://blog.rburchell.com/2012/03/qt-51-aka-when-qfilesystemwatcher-might.html

Вам нужно будет реализовать это самостоятельно для каждой платформы, но если вы действительно в этом заинтересованы, вы можете поговорить с Робином о сотрудничестве.

Вот часть сообщения в блоге, чтобы увидеть, что планировалось:

В долгосрочной перспективе я планирую называть fileChanged и directoryChanged устаревшими. Они по-прежнему будут излучаться (конечно) для поддержания работоспособности существующего кода, но, кроме того, у вас будет (при условии проверки):

pathCreated (path) — испускается, когда что-то создается внутри каталога, который вы отслеживаете, или если создается то, чего не было, что вы отслеживали (подробнее об этом позже)

pathDeleted (путь) — генерируется, когда что-то удаляется в каталоге, который вы отслеживали, или что-то, что вы мы мониторинг был удален

fileModified (путь) — создается при изменении файла, который вы отслеживали (атрибуты или содержимое)

У меня также есть ранние планы представить pathMoved (oldLocation, newLocation), но у этого есть много предостережений: он может работать только на определенных платформах, в определенных фазах луны, и только если вам очень повезет — на многих платформы, он, вероятно, будет продолжать синтезироваться как pathDeleted (oldPath) и pathCreated (newPath) (если вы смотрите новое местоположение).

У меня также есть смутные идеи о введении более синтаксически дружественного API поверх этого, что-то вроде:

QPathMonitor pathMonitor (myPath);

подключения (&pathMonitor, SIGNAL (удаленный ()), слот (watchedPathDeleted ()));

… так далее …

но это немного дальше в том смысле, что я до сих пор не продумал это.

4

Другие решения


По вопросам рекламы [email protected]