我有一个 QT 应用程序,它需要知道特定文件中何时有新数据可用。所以我使用QFileSystemWatcher
并将fileChanged
信号连接到一个函数,该函数将在发生变化时发送消息。
问题是fileChanged
当另一个应用程序刷新此文件时不会发出信号,而只会在它关闭文件后发出。
但是,QFileSystemWatcher 文档说这个信号是“当指定路径的文件被修改、重命名或从磁盘中删除时”发出的。也许我错过了一些东西;包含哪些变化modified
?如果不包括刷新,如何检测新数据何时写入文件?
这是源代码:
主文件
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
主窗口.h
#include <QFileSystemWatcher>
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void fileChangedEvent(const QString & path);
private:
QFileSystemWatcher * watcher;
};
主窗口.cpp
#include "mainwindow.h"
MainWindow::MainWindow()
{
watcher = new QFileSystemWatcher();
connect(watcher, SIGNAL(fileChanged(QString)), this, SLOT(fileChangedEvent(QString)));
watcher->addPath("path to file");
}
void MainWindow::fileChangedEvent(const QString & path)
{
qDebug() << path;
}
MainWindow::~MainWindow()
{
if(watcher!=NULL)
{
delete watcher;
watcher=NULL;
}
}
这是另一个更改文件的应用程序的代码(这是一个第 3 方应用程序,所以我无法将其更改为与之同步):
#include <fstream>
int main () {
std::ofstream outfile ("path to file");
for (int n=0; n<100; ++n)
{
outfile << n;
outfile.flush();
}
outfile.close();
return 0;
}
fileChanged()
信号仅在被调用之后才发出,而std::ofstream outfile ("path to file");
不是outfile.close();
之后outfile.flush();