2016-09-20 72 views
1
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()方法在调用when时调用;Qt5 :: QFileSystemWatcher在文件修改时调用

  • 一个新的文件创建
  • 文件删除
  • 文件改名为

但是,如果我在此文件夹中打开一个文件,并修改内容后,我保存它,什么叫。

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

但是你可能知道,观察者有一个限制。所以我无法每次看数百个文件。

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

回答

1

如果您想要一个跨平台的解决方案,使用Qt5 :: QFileSystemWatcher,除了将您正在观察的目录中的每个文件添加到QFileSystemWatcher对象,希望您不会碰到文件描述符局限性。

如果你想使用操作系统特定的方法来观看文件系统,你可以从这个S/O答案中得到一些提示:https://stackoverflow.com/a/931165/228634但我敢肯定你会有相同的限制。

+0

感谢您的解释。请问,我应该做一个操作系统特定的解决方案,我会观看1.000-5.000左右的文件,或者我应该像'checkFileDates()'方法一样检查文件是否每隔x分钟更改一次?哪一个是正确的?或者至少针对特定于Windows的操作系统以及其他人的跨平台。 – xangr

+0

我会首先实现一个跨平台的解决方案,按照你的建议“checkFileDates()”。如果处理速度太慢,请实施特定于操作系统的解决方案。 – Tryum

+0

感谢您的回复!将按照你的建议去做。你的答案已经被接受。 – xangr