Seite 1 von 1

QFileSystemWatcher und maximale Anzahl zu überwachender Dirs

Verfasst: 7. Juli 2008 02:18
von buggybear
Hallo,

habe hier ein App, welches mehrere Verzeichnisse auf Änderungen überwachen soll. Funktioniert soweit ganz gut. Nun möchte ich aber dynamisch den Inhalt verschiedener Verzeichnisse einer bestimmten Verzeichnistiefe auf Änderungen überwachen. Also ich habe z.b. ein Verzeichnis c:\tmp, in diesem werden mit der Zeit diverse Unterverzeichnisse erstellt, die zusätlich überwacht werden sollen, also c:\tmp\001; c:\tmp\002 usw.. Nun scheint ab einer bestimmten Verzeichnismenge, der Watcher keinen neuen dirs mehr zu überwachen. Scheinbar ist bei 63 Schluss. (Habs nur unter WinXP testen können) Brauche aber bestimmt mind 700. Ist das ein Bug oder gibt es einen Workaround dafür oder wie könnte ein andere Lösungsansatz für dieses Problem aussehen?

Hier mal etwas relevanter Code:

Code: Alles auswählen


DirLog::DirLog() : QWidget()
{

[...]

	fileWatch = new QFileSystemWatcher();
	fileWatch->addPath("c:\\test");

       QDir dir("c:\\test");

        dir.setFilter(QDir::Dirs | QDir::Hidden | QDir::CaseSensitive | QDir::NoDotAndDotDot);

        // um sämtliche bereits vorhandenen Verzeichnisse zu adden

	QStringList dirListOld = dir.entryList();

        QStringList addToDirWatcher;

	for (int i = 0; i < dirListOld.size(); ++i) 
        {

		QString dirName = dirListOld.at(i);

		addToDirWatcher << "c:/test/" + dirName;
	}

        fileWatch->addPaths(addToDirWatcher);
        
        connect(fileWatch, SIGNAL(directoryChanged(const QString&)), this, SLOT(maguggn(const QString&)));

}


Verfasst: 7. Juli 2008 08:15
von Ginsengelf
Moin, die "Quick-and-dirty"-Lösung wäre, einen Zähler bis 63 zählen zu lassen, und dann einfach ein weiteres QFileSystemWatcher-Objekt zu erstellen. :?

Ginsengelf

Verfasst: 7. Juli 2008 15:07
von buggybear
Ja, da hatte ich auch schon dran gedacht, aber für meinen Anwendungszweck einfach nicht praktikabel.

Eine Möglichkeit das der QFileSystemWatcher ein komplettes Verzeichnis incl aller Subverzeichnisse überwacht gibt es nicht?

Ich möchte schlichtweg mitgeteilt bekommen, wann sich unter einem bestimmten Pfad irgendwas ändert und nicht wann sich nur in der ersten Verzeichnisebene etwas ändert. Finds schon komisch irgendwie das er Änderungen in z.b. c:/tmp anzeigt, aber in c:/tmp/test z.b. nicht. Oder hab ich vllt etwas übersehen?

Ne Möglichkeit die ich für mich nur sehe, quasi mittels QDir::entryList alle paar sekunden die Verzeichnisse und Dateien einlesen und die jeweiligen Listen untereinander vergleichen. Aber ob das effizient ist gerade bei Verzeichnissen mit 100ten Unterverzeichnissen und Dateien? Der ist da ja quasi permanent am rödeln.

Gibts da keine andere Möglichkeit?

Verfasst: 7. Juli 2008 16:22
von upsala

Verfasst: 7. Juli 2008 16:42
von buggybear
Danke für die Info. Brauch ich da gar nicht weiter probieren. :)

Auch das Problem zum überwachen kompletter Verzeichnisbäume scheint bereits registriert :)
http://trolltech.com/developer/task-tr ... id=124652

Bleibt mir wohl nix anderes als meine Listenmethode.