首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么获取回收站里的真实文件名

2012-04-09 
如何获取回收站里的真实文件名我们知道回收站是一个分区中的一个特殊文件夹,名字类似$RECYCLE.BIN。比如我

如何获取回收站里的真实文件名
我们知道回收站是一个分区中的一个特殊文件夹,名字类似$RECYCLE.BIN。比如我们X盘中有一个1.txt文件,我们直接删除放入回收站,那么感觉尽管我们看回收站中的名字是1.txt,但是实际上并不是。因为我们这时从回收站中重新拖出来,其源路径是 X:\$RECYCLE.BIN\S-1-5-21-……\$RXGT62B.txt这样的形式,目的路径是Des:\$RXGT62B.txt这样的形式,现在问题是我们在程序中如何可以获取这个看似随机的文件名$RXGT62B.txt的真实文件名,即最初的1.txt


[解决办法]

C/C++ code
DWORD ListFileInRecycleBin(){ TCHAR pszPath[MAX_PATH];  // 保存路径 // IShellFolder接口 IShellFolder *pisf = NULL; IShellFolder *pisfRecBin = NULL; // 获取“根”目录,桌面 SHGetDesktopFolder(&pisfRecBin);  IEnumIDList *peidl = NULL; // 对象遍历接口 LPITEMIDLIST pidlBin = NULL; LPITEMIDLIST idlCurrent = NULL;  LPMALLOC pMalloc = NULL; // 分配 SHGetMalloc(&pMalloc); // 回收站位置 SHGetFolderLocation(NULL, CSIDL_BITBUCKET, NULL, 0, &pidlBin); // 绑定回收站对象 pisfRecBin->BindToObject(pidlBin,NULL,IID_IShellFolder,(void **) &pisf); // 列举回收站中的对象,得到IEnumIDList接口,包括SHCONTF_FOLDERS、 // SHCONTF_NONFOLDERS、SHCONTF_INCLUDEHIDDEN类型的对象 pisf->EnumObjects(NULL,  SHCONTF_FOLDERS | SHCONTF_NONFOLDERS |SHCONTF_INCLUDEHIDDEN,  &peidl);  STRRET strret; ULONG uFetched;  HANDLE hOutPut = GetStdHandle(STD_OUTPUT_HANDLE); printf("\nFiles In Recycle Bin:\n");  while(1) {  // 遍历IEnumIDList对象,idlCurrent为当前对象  if(peidl->Next(1,&idlCurrent,&uFetched) == S_FALSE)   break;  // 获取回收站当前对象当前的路径,这里没有输出结果,读者可自行修改  SHGetPathFromIDList(idlCurrent,  pszPath);  // DisplayName,删除前的路径  pisf->GetDisplayNameOf(idlCurrent,SHGDN_NORMAL,&strret);  // 显示,printf可能会造成字符编码不正确。  WriteConsoleW(hOutPut,L"\t",1,NULL,NULL);  WriteConsoleW(hOutPut,strret.pOleStr,lstrlenW(strret.pOleStr),NULL,NULL);  WriteConsoleW(hOutPut,L"\n",1,NULL,NULL); } // 释放资源 pMalloc->Free(pidlBin); pMalloc->Free(strret.pOleStr); pMalloc->Release(); peidl->Release(); pisf->Release(); return 0; } 

热点排行