我需要知道回收站文件夹的名称,以便我可以通过我的 Delphi 西雅图应用程序清空它。我用下面的代码没有任何成功。同样的代码工程的CSIDL_COOKIES,CSIDL_RECENT等其他文件夹,但不知何故CSIDL_BITBUCKET不给予任何输出。
function GetWinSysFolders(FolderTpye:Integer):String;
var
Allocator: IMalloc;
SpecialDir: PItemIdList;
FBuf: array[0..MAX_PATH] of Char;
PerDir: string;
begin
if SHGetMalloc(Allocator) = NOERROR then
begin // form1.Handle v
SHGetSpecialFolderLocation( 0, FolderTpye, SpecialDir);
SHGetPathFromIDList(SpecialDir, @FBuf[0]);
Allocator.Free(SpecialDir);
result:=string(FBuf);
end;
end;
1条答案
按热度按时间r3i60tvu1#
您无法获得
CSIDL_BITBUCKET
的文件系统路径,因为它根本没有一个文件系统路径作为开始--您所认为的“回收站”实际上是Shell中的一个虚拟文件夹。每个驱动器都有自己的物理bin存储,而CSIDL_BITBUCKET
表示虚拟文件夹,它将所有单独的驱动器bin作为Shell中的一个实体。此外,“Recycle Bin”包含有关每个已删除文件的元数据,例如文件属于哪个用户、从何处删除等。因此,您无法在文件系统级别与
CSIDL_BITBUCKET
的内容交互(并非不破坏它,你需要使用Shell接口来代替。更多细节请看Raymond Chen关于How can I get information about the items in the Recycle Bin?和Invoking commands on items in the Recycle Bin的博客文章。例如,您可以使用Shell接口枚举“回收站”中的文件,并根据需要对每个所需文件调用"delete"
动词。也就是说,Win32 API有一个简单的
SHEmptyRecycleBin()
函数可以清空指定驱动器的回收站中的文件。使用该函数而不是手动清空“回收站”。