void CPlugin::GetPathParts(UStringVector &pathParts) { pathParts.Clear(); CMyComPtr<IFolderFolder> folderItem = _folder; for (;;) { CMyComPtr<IFolderFolder> newFolder; folderItem->BindToParentFolder(&newFolder); if (newFolder == NULL) break; NCOM::CPropVariant prop; if (folderItem->GetFolderProperty(kpidName, &prop) == S_OK) if (prop.vt == VT_BSTR) pathParts.Insert(0, (const wchar_t *)prop.bstrVal); folderItem = newFolder; } }
STDMETHODIMP CAgent::SetFolder(IFolderFolder *folder) { _archiveNamePrefix.Empty(); if (folder == NULL) { _agentFolder = NULL; return S_OK; } else { CMyComPtr<IFolderFolder> archiveFolder = folder; CMyComPtr<IArchiveFolderInternal> archiveFolderInternal; RINOK(archiveFolder.QueryInterface(IID_IArchiveFolderInternal, &archiveFolderInternal)); RINOK(archiveFolderInternal->GetAgentFolder(&_agentFolder)); } UStringVector pathParts; pathParts.Clear(); CMyComPtr<IFolderFolder> folderItem = folder; if (folderItem != NULL) for (;;) { CMyComPtr<IFolderFolder> newFolder; folderItem->BindToParentFolder(&newFolder); if (newFolder == NULL) break; NCOM::CPropVariant prop; if (folderItem->GetFolderProperty(kpidName, &prop) == S_OK) if (prop.vt == VT_BSTR) pathParts.Insert(0, (const wchar_t *)prop.bstrVal); folderItem = newFolder; } for (int i = 0; i < pathParts.Size(); i++) { _archiveNamePrefix += pathParts[i]; _archiveNamePrefix += WCHAR_PATH_SEPARATOR; } return S_OK; }