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

2

指定したフォルダー自体を削除するのではなく、その内容のみを削除する必要があるため、フォルダーの内容を列挙して個別に削除する必要があります。を呼び出して、コンテンツを表すIShellItem::BindToHandler(BHID_EnumItems)を取得し、それ自体を に渡すのではなく、 に渡してみてください。IEnumShellItemsIFileOperation::DeleteItems()IShellItemIFileOperation::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 に答える