我有一个如下所示的辅助方法:
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
目录。
答案 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();
}
}