2012-07-26 8 views
2

J'ai le problème suivant: Je crée un QFileSystemWatcher et il tourne et fonctionne bien sur Linux, mais pas sur Windows 7. Pouvez-vous repérer quelque chose dans le code qui pourrait le faire ne pas fonctionner?Qt QFileSystemWatcher sur Windows

Thx.

Voici le code pour l'initialiser:

mConfigChangeWatcher = new QFileSystemWatcher(); 
mConfigChangeWatcher->addPath(config_file_name); 

QObject::connect(mConfigChangeWatcher, 
       SIGNAL(fileChanged(QString)), 
       this, 
       SLOT(configFileChanged(QString))); 

ce qui est censé être la fente faire le travail:

void MyClass::configFileChanged(const QString &file) 
{ 
    qDebug() << "Changed: " << file ; 
} 
+0

Peut-être que le chemin doit être représenté différemment? –

+0

le chemin est comme: '(" C: /Users/fela/work/d_RTI-1638/build/Applications/Debug/conf/configuration.xml ")' (ceci est la sortie de mConfigChangeWatcher-> files() – fritzone

+0

J'ai écrit une application simple, et cela fonctionne, peut-être pour notre cas, c'est le fait que nous déplaçons l'application sur un fil différent, et puis les signaux se perdent ... – fritzone

Répondre

3

Lorsque vous vérifiez si le fichier est ajouté au veilleur en utilisant la méthode QFileSystemWatcher::files() après la première modification dans le fichier obtenez-vous la bonne liste?

J'étais avec le problème que certaines applications, lors de la modification d'un fichier, supprimer l'ancien fichier du système et l'écrire à nouveau. Notez que QFileSystemWatcher arrête de surveiller les fichiers une fois qu'ils ont été renommés ou supprimés du disque et les répertoires une fois qu'ils ont été supprimés du disque. J'utilisais QFileSystemWatcher pour regarder un fichier image édité par Photoshop. J'utilisais QFileSystemWatcher. D'une manière ou d'une autre, le fichier est supprimé de la liste des fichiers surveillés.

+0

merci, je n'ai même pas supposé fichier peut être supprimé puis créé lorsque vous l'enregistrez est une application.Cela explique pourquoi mon QFileSystemWatcher cesse de surveiller un fichier quand je l'édite – Dmitriy

+0

BTW, je ne sais toujours pas une bonne façon de gérer ce problème. une minuterie à un coup, puis ajouter à nouveau le fichier à surveiller.Cela ne fonctionne pas dans tous les cas, mais résout mon problème à l'époque – McLeary

+0

:) J'ai utilisé exactement la même solution de contournement. L'autre solution de contournement à laquelle je pensais est de surveiller le répertoire qui contient le fichier. Mais le premier est plus simple et fonctionne bien pour moi – Dmitriy

1

J'ai eu le même problème et l'ai résolu très rapidement. Dans l'emplacement qui gère le signal fileChanged, j'ai noté que le chemin disparaît de files(). Je fais simplement un chèque et ajouter à nouveau si nécessaire

if (! watcher_.files().contains(path)) 
{ 
    watcher_.addPath(path); 
} 

J'espère que cette aide

Fabio