VC-如何删除回收站里的某指定文件?

发布于 2016-12-03 01:46:37 字数 63 浏览 1348 评论 1

微软提供了一个SHEmptyRecycleBin可以清空整个回收站,但是如果只想删除其中某一个文件,该怎么处理?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

晚风撩人 2017-07-16 13:22:28

void DeleteFileFromRecycleShell(const CString& sFileName)
{
HRESULT hr;

// Call this if needed.
CoInitialize( NULL );

IShellFolder* pRecycleFolder = NULL;
IMalloc* pMalloc = NULL;

hr = ::SHGetMalloc(&pMalloc);

// Get desktop folder.
hr = ::SHGetDesktopFolder(&pRecycleFolder);

// Get the recycleBin folder.
ITEMIDLIST* pidlRecycleFolder = NULL;
hr = ::SHGetSpecialFolderLocation(NULL, CSIDL_BITBUCKET, &pidlRecycleFolder);

// Get the IShellFolder of the recycleBin folder.
IShellFolder* pHistoryFolder = NULL;
hr = pRecycleFolder ->BindToObject(pidlRecycleFolder, NULL, IID_IShellFolder, (void**)&pRecycleFolder );

// Enumerate the recycleBin items.
IEnumIDList* pRecycleEnum = NULL;
hr = pRecycleFolder->EnumObjects(NULL, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &pRecycleEnum );

ITEMIDLIST* pidl = NULL;
ULONG fetched = 0;

hr = pRecycleEnum ->Next(1, &pidl, &fetched);

STRRET strret;

if (SUCCEEDED(hr))
{
TCHAR pszPath[MAX_PATH]; // 保存路径
const ITEMIDLIST* pidl2 = pidl;
pisf->GetDisplayNameOf(idlCurrent,SHGDN_NORMAL,pszPath);

if(sFileName == pszPath)
{
// Get the IContextMenu interface.
IContextMenu* pContextMenu = NULL;
hr = pRecycleFolder->GetUIObjectOf(NULL, 1, &pidl2, IID_IContextMenu, NULL, (void**)&pContextMenu);

if (SUCCEEDED(hr))
{
CMINVOKECOMMANDINFO pCommandInfo = { 0 };

pCommandInfo.cbSize = sizeof(CMINVOKECOMMANDINFO);
pCommandInfo.lpVerb = _T("delete");
pCommandInfo.fMask = CMIC_MASK_FLAG_NO_UI; // has no effect
hr = pContextMenu->InvokeCommand(&pCommandInfo);
}

pContextMenu->Release();
}
}

pRecycleEnum ->Release();
pRecycleFolder->Release();
pMalloc->Release();
pidlRecycleFolder->Release();
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文