別のアプリケーションによって変更されたログ ファイルを追跡しています。Linux では、他のアプリケーションがファイルを変更するとすぐに fileChanged シグナルを正しく受け取ります。Windows では、QFileSystemWatcher は他のアプリケーションが閉じられるまで fileChanged シグナルを発行しません。
実際に変更されていることを確認するためにメモ帳でログを開こうとしました。メモ帳がログを開くとすぐに、QFileSystemWatcher が fileChanged シグナルを送信します。
私のコード:
void LogLoader::createFileWatcher()
{
if(fileWatcher != NULL) delete fileWatcher;
fileWatcher = new QFileSystemWatcher(this);
connect(fileWatcher, SIGNAL(fileChanged(QString)),
this, SLOT(prepareLogWorker(QString)));
if(fileWatcher->addPath(logPath))
{
qDebug() << "LogLoader: "<< "FileWatcher linked.";
}
}
void LogLoader::prepareLogWorker(QString path)
{
//Added this just in case because I read it as solution
//in other question. But in my case the file is not removed.
if (!fileWatcher->files().contains(path))
{
fileWatcher->addPath(path);
}
QTimer::singleShot(1000, this, SLOT(sendLogWorker()));
}
私は何か間違ったことをしていますか?ファイルを時々手動でチェックする以外に解決策はありますか?