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
。
我的问题比较简单。我有一个应用程序,我需要在其中监视特定文件夹(在我的例子中是下载文件夹)的 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
。