【问题标题】:FOF_NORECURSION while deleting a file with subfolders删除带有子文件夹的文件时 FOF_NORECURSION
【发布时间】:2019-03-17 04:11:01
【问题描述】:

谁能给我解释一下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++ winapi windows-shell recycle-bin


    【解决方案1】:

    您可能希望使用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;
    }
    

    【讨论】:

    • 是的,但 pFrom 必须以双空结尾,更正确地使用 * 而不是 *.* 掩码。所以像L"C:\\vacation\\pictures\\*\0";
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    相关资源
    最近更新 更多