我正在跟踪由另一个应用程序更改的日志文件。在 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()));
}
难道我做错了什么?除了不时手动检查文件之外,还有其他解决方案吗?