首页 > 解决方案 > 删除带有子文件夹的文件时 FOF_NORECURSION

问题描述

有人可以向我解释一下FOF_NORECURSION标志的 MSDN 描述是什么意思:

FOF_NORECURSION

仅在本地目录中执行操作。不要递归操作到子目录,这是默认行为。

SHFileOperation与删除文件夹的功能一起使用时?

SHFILEOPSTRUCT sfos = {0};
sfos.hwnd = hWnd;
sfos.wFunc = FO_DELETE;
sfos.pFrom = folderPath;   //Must be doubly-null-terminated
sfos.pTo = NULL;
sfos.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR | 
              FOF_NOERRORUI | FOF_SILENT | FOF_NORECURSION;

SHFileOperation(&sfos);

我的理解是,如果我在包含子文件夹的文件夹上调用它,则该文件夹不会被删除。但这不是我所看到的。

标签: c++winapiwindows-shellrecycle-bin

解决方案


您可能希望使用该FOF_FILESONLY标志不递归到子文件夹。*.*并用您的路径明确地质量删除操作。

int main()
{
    CoInitialize(nullptr);

    SHFILEOPSTRUCT sfos = { 0 };
    sfos.hwnd = nullptr;
    sfos.wFunc = FO_DELETE;
    sfos.pFrom = L"C:\\vacation\\pictures\\*.*\0";
    sfos.pTo = NULL;
    sfos.fFlags = FOF_FILESONLY;

    auto result = SHFileOperation(&sfos);

    return 0;
}

推荐阅读