1

我有一个看起来像这样的辅助方法:

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目录。

4

2 回答 2

4
IShellItem* item = NULL;
SHCreateItemFromParsingName(L"C:\\data\\test", NULL, IID_PPV_ARGS(&item));
于 2013-10-23T00:13:08.403 回答
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();
    }
}
于 2014-02-04T06:54:59.927 回答