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
相关产品推荐
相关产品推荐

