Qt5::QFileSystemWatcher 调用文件修改

Qt5::QFileSystemWatcher to invoke on file modification

QFileSystemWatcher watcher;
watcher.addPath("C:/watch");

QStringList directoryList = watcher.directories();
Q_FOREACH(QString directory, directoryList)
    qDebug() << "Directory name" << directory <<"\n";

DirectoryWatcher* dw = new DirectoryWatcher;

QObject::connect(
    &watcher, SIGNAL(directoryChanged(const QString&)),
    dw,       SLOT(modified(const QString&))
);

QObject::connect(
    &watcher, SIGNAL(fileChanged(QString)),
    dw,       SLOT(modified(QString))
);

在此示例中,modified() 方法调用时;

但是,如果我打开此文件夹中的文件并修改内容,保存后,没有任何调用。

如果我将该特定文件添加到 addPath("c:/watch/me.txt") 之类的路径,然后在修改后调用它。

但是您可能知道,watcher 是有限制的。所以不能每次都看几百个文件

如何在文件修改时调用 modified() 方法?

如果你想要一个跨平台的解决方案,使用 Qt5::QFileSystemWatcher,除了将你正在监视的目录中的每个文件添加到 QFileSystemWatcher 对象之外别无他法,希望你不会点击文件描述符限制。

如果你想使用 OS 特定的方法来监视文件系统,你可以从这个 S/O 答案中得到一些提示: 但我很确定你会有同样的限制。