You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi Seattle获取回收站路径失败:CSIDL_BITBUCKET无输出求助

在Delphi Seattle中处理回收站:获取信息与清空操作

你的代码对CSIDL_COOKIES、CSIDL_RECENT等文件夹有效,但对CSIDL_BITBUCKET失效,核心原因是回收站属于虚拟文件夹,没有常规的文件系统路径,SHGetPathFromIDList无法将其PIDL转换为普通路径字符串。

如果你的目标是清空回收站,无需获取路径,直接调用Shell官方API即可。以下是两种可行方案:

方案1:直接清空所有驱动器的回收站

使用SHEmptyRecycleBin函数,这是最直接的清空实现方式:

uses
  ShellAPI;

procedure EmptyRecycleBin;
begin
  // 无确认对话框、无进度窗口、无提示音
  SHEmptyRecycleBin(0, nil, SHERB_NOCONFIRMATION or SHERB_NOPROGRESSUI or SHERB_NOSOUND);
end;

方案2:获取回收站详细信息(含各驱动器回收站位置)

如果需要获取回收站的具体信息(比如各驱动器回收站的已删除文件数、占用空间),可以使用SHQueryRecycleBin函数:

uses
  ShellAPI, Windows;

procedure GetRecycleBinInfo;
var
  RecycleBinInfo: TSHQueryRBInfo;
  Drive: Char;
  DrivePath: array[0..3] of Char;
begin
  ZeroMemory(@RecycleBinInfo, SizeOf(RecycleBinInfo));
  RecycleBinInfo.cbSize := SizeOf(RecycleBinInfo);

  // 遍历所有驱动器查询回收站信息
  for Drive := 'A' to 'Z' do
  begin
    DrivePath[0] := Drive;
    DrivePath[1] := ':';
    DrivePath[2] := '\';
    DrivePath[3] := #0;

    if SHQueryRecycleBin(PChar(DrivePath), RecycleBinInfo) = S_OK then
    begin
      ShowMessage(Format('驱动器 %c:'#13#10'已删除文件数: %d'#13#10'占用空间: %d KB',
        [Drive, RecycleBinInfo.i64NumItems, RecycleBinInfo.i64Size div 1024]));
    end;
  end;
end;

注:Vista及以上系统中,各驱动器的回收站实际物理路径为X:\$Recycle.Bin,但直接操作该路径需要管理员权限,且官方不推荐这种方式,使用Shell API更安全可靠。

内容的提问来源于stack exchange,提问作者AFerns100

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 06:27:24