delphi 需要回收站文件夹名称

stszievb  于 2023-03-18  发布在  其他
关注(0)|答案(1)|浏览(187)

我需要知道回收站文件夹的名称,以便我可以通过我的 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;
r3i60tvu

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()函数可以清空指定驱动器的回收站中的文件。使用该函数而不是手动清空“回收站”。

相关问题