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 答案中得到一些提示: 但我很确定你会有同样的限制。
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 答案中得到一些提示: 但我很确定你会有同样的限制。