用 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
BOOL b=SHGetSpecialFolderPath(NULL,sz,CSIDL_BITBUCKET,FALSE);不行,MSDN上说If a virtual folder is specified, this function will fail.
该死的CSIDL_BITBUCKET 就是一个Virtual Folder
SHGetFolderLocation
然后
ParseDisplayName
--Translates a file object's or folder's display name into an item identifier list.应该不行吧。
回收站中的文件,我不能肯定能不能读写。
--
PIDL. 是什么,学习~
它大大扩展了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位的零。