如何使用IFileOperation清空文件夹

时间:2013-10-22 23:16:25

标签: c++ windows file

我有一个如下所示的辅助方法:

HRESULT DeleteFolderAndContainedFiles(IShellItem *psiFolder)
{
    IFileOperation *pfo;
    HRESULT hr = CreateAndInitializeFileOperation(IID_PPV_ARGS(&pfo));
    if (SUCCEEDED(hr))
    {
        hr = pfo->DeleteItem(psiFolder, NULL);
        if (SUCCEEDED(hr))
        {
            hr = pfo->PerformOperations();
        }
        pfo->Release();
    }
    return hr;
}

如何使用IShellItem(我没有经验)调用此方法?我想传递一个类似C:\data\test的路径,它应该清除测试目录下的所有内容,但不要删除test目录。

2 个答案:

答案 0 :(得分:2)

IShellItem* item = NULL;
SHCreateItemFromParsingName(L"C:\\data\\test", NULL, IID_PPV_ARGS(&item));

答案 1 :(得分:2)

由于您不想删除指定文件夹本身,只删除其内容,因此您必须枚举文件夹的内容并单独删除它们。尝试致电IShellItem::BindToHandler(BHID_EnumItems)以获取代表内容的IEnumShellItems并将其传递给IFileOperation::DeleteItems(),而不是将IShellItem本身传递给IFileOperation::DeleteItem()

hr = psiFolder->BindToHandler(NULL, BHID_EnumItems, IID_IEnumShellItems, (void**)&pEnum);
if (SUCCEEDED(hr))
{
    hr = pfo->DeleteItems(pEnum);
    if (SUCCEEDED(hr))
    {
        hr = pfo->PerformOperations();
    }
}