QT5 - 检测新文件何时添加到目录并检索它们的路径

QT5 - Detecting when new files are added to a directory and retrieving their path

我的问题比较简单。我有一个应用程序,我需要在其中监视特定文件夹(在我的例子中是下载文件夹)的 added 文件。每当将文件添加到该文件夹​​时,我都想将该文件移动到一个完全不同的目录。我一直在看QFileSystemWatcher;但是,它提供的 none 信号似乎非常适合我的情况。

这是我当前的代码:

connect(&m_fileWatcher, &QFileSystemWatcher::directoryChanged, this, &FileHandler::directoryChanged);

void FileHandler::directoryChanged(const QString &dir)
{
  qDebug() << "File changed...." << string;
  // Some other logic
}

这个信号只给我一个字符串,它是见证更改的目录。我不知道发生了什么样的更改(添加、重命名或删除),我也不知道更改了哪个文件。

我知道我可以将目录中的所有文件存储在某种数据结构中,并在发出此信号时执行一些其他逻辑,但在这种情况下这似乎不是很好,因为我处理用户的 downloads 文件夹(可能包含数千个文件)。

我怎样才能完成这项工作?我应该参考 QT 提供的不同帮助程序 class,还是在使用 QFileSystemWatcher 时我可以通过其他方式做到这一点?我只是在寻找想法。

谢谢。

您已经达到底层 OS 提供的极限:目录内容更改通知。

如果你想识别文件:

  • 已删除您必须有一个可用于比较的先前文件列表
  • 添加与删除相同
  • modified 遍历具有最新 last modified date
  • 的文件的目录

IDK 如果您希望使用来自 Qt 的任何特定文件名容器 class 或只是 std::vector <std::filesystem::path> 或类似的缓存文件夹内容。

QFileSystemWatcher 只会通知您发生了更改,但不会通知更改内容的详细信息。因此,您将不得不求助于 OS-specific API 来获取详细信息。例如,在 Windows 上,您可以使用 ReadDirectoryChangesW() 而不是 QFileSystemWatcher