windows - 有没有办法做一个异步FindNextFile?

标签 windows winapi file-io ntfs

在大型文件夹(约 300,000 个对象)上,FindNextFile 最多可能需要 20 秒才能响应单个文件。我假设后台正在进行一些批量操作,但这使得操作很难取消。

有没有办法以异步模式运行FindNextFile,以便在不再需要该信息时可以取消它?

Win7、x64、NTFS。

旁注:Windows 缓存信息后,FindNextFile 似乎不会出现此问题。仅在第一次尝试枚举大文件夹中的文件时。

最佳答案

不,FindNextFile 是同步的,没有可比的异步函数。解决此类问题的通常方法是多线程。您需要两个线程:一个应始终响应用户的 UI 线程和一个执行 FindNextFile 调用的工作线程。我会使用带有锁定机制的队列。逻辑看起来像这样:

工作线程:

FindFirstFile();
do
{
    LockQueue();
    AddFileToQueue();
    UnlockQueue();
 while (FindNextFile() && !UserCanceled());
 SetAllFilesDone();

用户界面线程:

while (!UserCanceled() && !AllFilesDone())
{
    LockQueue();
    GetFileFromQueue();
    UnlockQueue();
    ProcessFile();
}

关于windows - 有没有办法做一个异步FindNextFile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11975768/

相关文章:

c# - 如何: Given HWND,发现窗口是否是模态窗口

c++ - 用 C++ 读取文本文件最优雅的方法是什么?

python - 我无法在 Windows 上安装 pyaudio? "error: Microsoft Visual C++ 14.0 is required."怎么解决?

C++ 持有多个线程

c++ - 如何制作 Web 浏览器工具栏?

php - 读取保存在文件中的 php 数组?

ruby - 使用 File.open 从 ruby​​ 中的目录打开文件

python - 使用 tkinter 中的链接打开一个新窗口

java - 在 Windows 启动时运行 Java 应用程序

c - 如何禁用任务栏中的 'Close Window' 选项?