我正在使用通用文件对话框FOS_PICKFOLDERS让用户选择一个位置来保存文件。如果用户选择了一个库,例如,Library\Documents那么我当前的代码在我调用IShellItem::GetDisplayName以提取文件系统名称的地方失败。如果该项目是一个文件,那么这将成功并且将使用库的默认保存位置。
我想要做的是检测shell项是一个库,然后获取一个IShellLibrary接口,然后查询它以找到默认的保存位置。然后我会把我的文件保存在那里。
检测IShellItem指向图书馆的正确方法是什么?
用于从 anSHLoadLibraryFromItem()获取IShellLibraryan IShellItem,例如:
IShellItem *pItem, *pSave;
IShellLibrary *pLibrary;
...
if (SUCCEEDED(SHLoadLibraryFromItem(pItem, STGM_READWRITE, IID_IShellLibrary, (void**)&pLibrary)))
{
pLibrary->GetDefaultSaveFolder(DSFT_DETECT, IID_IShellItem, (void**)&pSave);
pLibrary->Release();
}
else
{
pSave = pItem;
pSave->AddRef();
}
...
pSave->GetDisplayName(...);
pSave->Release();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
784 次 |
| 最近记录: |