用 char sz[MAX_PATH];
BOOL b=SHGetSpecialFolderPath(NULL,sz,CSIDL_BITBUCKET,FALSE);不行,MSDN上说If a virtual folder is specified, this function will fail. 
该死的CSIDL_BITBUCKET 就是一个Virtual Folder

解决方案 »

  1.   

    试试
    SHGetFolderLocation
    然后
    ParseDisplayName
      

  2.   

    ParseDisplayName??
    --Translates a file object's or folder's display name into an item identifier list.应该不行吧。
      

  3.   

    哈哈,你删除到回收站之后,再枚举出这个文件的路径,然后用CREATEFILE打开看能不能读写吧。
    回收站中的文件,我不能肯定能不能读写。
      

  4.   

    楼上的方法行不通滴。 文件删除到回收站后文件名就跟原来的不一样了。你在命令行进入回收站的目录看一下。一般每个盘根目录下都有一个名为Recycled的文件夹,这里就是放的删除的文件。名字都是DC+数字来命名的。 根本不能区分出这个文件原来是什么。跟我们在资源管理器里看到的不一样。所以你是枚举不到原来的文件的。
      

  5.   

    : everandforever(Forever) (
    --
    PIDL.  是什么,学习~
      

  6.   

    外壳名字空间(Shell Name Space).外壳名字空间是Windows下的标准文件系统,
     它大大扩展了Dos文件系统,形成了以“桌面”(Desktop)为根的单一的文件系统
     树,原有的C盘、D盘等目录树变成了“我的电脑”这一外壳名字空间子树的下一级
     子树,而像“控制面板”、“回收站”、“网上邻居”等应用程序及“打印机”等设
     备也被虚拟成了外壳名字空间中的节点。另外,与DOS中物理存储只能和文件系统
     项一一对应这一点不同的是,一个实际目录在外壳名字空间中可以表现为不同的项。
     例如“我的文档”与“C:\My Documents”其实都指向“C:\My Documents”目录,但
     它们在外壳名字空间中是不同的项。 外壳名字空间下的路径: PIDL
     PIDL是一个元素类型为ITEMIDLIST结构的数组,数组中元素的个数是未知的,但紧接
     着数组末尾的必是一个双字节的零。每个数组元素代表了外壳名字空间树中的一层(
     即一个文件夹或文件),数组中的前一元素代表的是后一元素的父文件夹。由此可见,
     PIDL实际上就是指向一块由若干个顺序排列的ITEMIDLIST结构组成、并在最后有一个
     双字节零的空间的指针。所以PIDL的类型就被Windows定义为ITEMIDLIST结构的指针。 PIDL亦有“绝对路径”与“相对路径”的概念。表示“相对路径”的PIDL只有一个
     ITEMIDLIST结构的元素,用于标识相对于父文件夹的“路径”;表示“绝对路径”的
     PIDL(简称为“绝对PIDL”)有若干个ITEMIDLIST结构的元素,第一个元素表示外壳
     名字空间根文件夹(“桌面”)下的某一子文件夹A,第二个元素则表示文件夹A下的
     某一子文件夹B,其余依此类推。这样绝对PIDL就通过保存一条从“桌面”下的直接子
     文件夹或文件的绝对PIDL与相对PIDL是相同的,而其他的文件夹或文件的相对PIDL就
     只是其绝对PIDL的最后一部分了。由于所有的PIDL都是从桌面下的某一个子文件夹开
     始的,所以对于桌面本身来说,它的PIDL数组显然一个元素都没有。这样就只剩下PIDL
     数组最后的那个双字节的零了。所以,“桌面”的PIDL就是一个16位的零。