- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 QT 应用程序需要知道特定文件中的新数据何时可用。所以我使用了 QFileSystemWatcher
并将 fileChanged
信号连接到一个函数,该函数将在发生更改时发送消息。
问题是 fileChanged
信号不会在另一个应用程序刷新此文件时发出,而只会在它关闭文件后发出。
然而,QFileSystemWatcher documentation说这个信号是“当指定路径的文件被修改、重命名或从磁盘中删除时”发出的。也许我错过了什么; modified
中包含哪些更改?如果不包括刷新,我如何检测新数据何时写入文件?
这是源代码:
main.cpp
#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();
最佳答案
在 Windows 上,似乎 fileChanged
信号在文件的时间戳更改时发出,这发生在文件关闭时 (std::ofstream::close()
) 但不是(至少在 Windows 上)刷新时 (std::ofstream::flush()
)。为了测试它,我在每次写入文件后(在调用 std::ofstream::flush()
之后)使用以下函数显式更新了文件的时间戳:
#include <ctime>
#include <sys/stat.h>
#ifdef _WIN32
#include <sys/utime.h>
#else
#include <utime.h>
#endif
bool UpdateFileTimestamp(std::string fileName) {
struct stat fstat;
struct utimbuf new_time;
if (0 != stat(fileName.c_str(), &fstat))
return false;
new_time.actime = fstat.st_atime;
new_time.modtime = time(NULL);
if (0 != utime(fileName.c_str(), &new_time))
return false;
return true;
}
它奏效了。 fileChanged
信号按预期发出。
关于c++ - QFileSystemWatcher:检测文件是否已刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34267516/
看似简单,实则行不通。我安装了 usbautomount。 #Watch the media directory and connect to enable save csv pb self.usb_
我有一个 QT 应用程序需要知道特定文件中的新数据何时可用。所以我使用了 QFileSystemWatcher 并将 fileChanged 信号连接到一个函数,该函数将在发生更改时发送消息。 问题是
我有以下问题:我创建了一个 QFileSystemWatcher它在 Linux 上运行良好,但在 Windows 7 上无法正常运行。您能在代码中发现任何可能使其无法工作的内容吗? 谢谢。 这是初始
QFileSystemWatcher watcher; watcher.addPath("C:/watch"); QStringList directoryList = watcher.directo
我正在摆弄 QFileSystemWatcher,跟随 this example .但是在编译时出现 Unresolved external symbol 错误。这是我的代码: #include #
大家好我想使用QFileSystemWatcher递归地观察给定目录及其子目录的变化,但是void QFileSystemWatcher::addPath (const QString & path)
我正在使用 QFileSystemWatcher 来监视我在 watcher->addPath("myPath") 方法中设置的目录中的更改。 当我调用 watcher->directories()
摘自 How do I watch a file for changes? 中的片段: ... @QtCore.pyqtSlot(str) def file_changed(path): pr
在我的文件 console.h/.cpp 中,我有一个小类,它只要求用户输入一些文本,然后再次打印文本,直到用户输入“退出”(参见方法 consoleMain())。然而,在 main.cpp 我也有
我遇到文件被两次上传到服务器的问题。 我在 Windows XP 上使用 C++ Qt 的 QFileSystemWatcher 类在文件夹更改时发送文件文件很小 (1-12kb)。 应用程序通过在文
我是 QT 新手,我想使用 QFileSystemWatcher 来监控文件夹。我只是想不出该怎么做。 我读过 http://qt-project.org/doc/qt-4.8/qfilesystem
我提前道歉,我是 QT 的新手(而且是 C++ 的新手) 我正在尝试设置一个程序,该程序将在特定文件发生更改时执行某个功能。尽管在谷歌上花了几个小时并阅读了 QT 上提供的文档,但我无法找到一种方法让
我有一个 QTreeView,它是通过重新实现 QFileSystemModel 填充的。据我所知,QFileSystemModel 在 rootPath 上安装了一个 QFileSystemWatc
如何从 QFileSystemWatcher directoryChanged 事件中获取更改的文件名? 最佳答案 如果您对文件名更感兴趣,则需要将插槽连接到 fileChanged() 信号而不是
我正在尝试检测由另一个 tcl/python 应用程序修改的文件中的更改。我对文件使用了 QFileSystemWatcher addPath。它不会针对文件更改发出 fileChanged(QStr
这是我的应用程序的基本前提: 我已经建立了一个 QFileSystemWatcher 来监视目录。 Path = [r'C:\Users\user\Documents\Images'] Directo
我有一个 Qt 5 C++ 应用程序,它使用 QFileSystemWatcher 运行很好地监视本地文件。我现在正试图在另一台主机上观看通过 nfs 安装的文件。虽然我的应用可以打开和读取文件,但它
我需要查看qt中的目录。创建了连接。但是当文件被编辑时,发送者会发出两次目录更改信号。 filechanged 信号也同时发出。发射两次信号有什么用?有什么方法可以知道哪个文件/文件夹被更改了?请帮忙
我需要监控一个文件系统,我有一个函数可以递归浏览文件夹和文件,并将它们的路径添加到我的 QFileSystemWatcher 中: void watchFileSystem(const QDir& d
周末我试图解决这个问题,但无济于事。我似乎找不到使用 QFileSystemWatcher::Files() 的示例直接所以我想我会问。 我有一个程序: 让用户选择“来源”文件夹。 按下按钮开始查看源
我是一名优秀的程序员,十分优秀!