c++ - 如何删除标记为 SFGAO_STREAM 的对象?

标签 c++ delphi windows-shell

我有一个文件,我可以通过 IShellFolder 通过 pidl 访问它。此文件具有标志 SFGAO_CANDELETE,其父文件夹仅具有标志 SFGAO_STORAGEANCESTOR

如何删除文件?

条件:

  1. 文件和文件夹位于 USB 设备(数码相机和手机)上。
  2. 一个解决方案应该至少在 WinXP 上有效(最好支持 Win2000)
  3. 不使用 WPD。

我试着调用 SHFileOperation在 pidl 上,但它需要一个文件系统路径,而不是我拥有的 GUID 样式路径。 I asked about this on Experts Exchange ,我在那里了解到 IFileOperation ,但这需要 Windows Vista。

示例:

parent folder::
media ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\usb#vid_04e8&pid_6860&ms_comp_mtp&samsung_android#7&69f3c26&0&0000#{6ac27878-a6fa-4155-ba85-f98f491d4f33}\SID-{10001,SECZ9519043CHOHB,12351995904}\{0000000C-0000-0000-0000-000000000000} 
SFGAO_CANCOPY
SFGAO_CANMOVE
SFGAO_CANRENAME
SFGAO_CANDELETE
SFGAO_HASPROPSHEET
SFGAO_DROPTARGET
SFGAO_STORAGEANCESTOR
SFGAO_FOLDER
SFGAO_HASSUBFOLDER
SFGAO_CONTENTSMASK

file to delete:
some breathing.mp3 ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\usb#vid_04e8&pid_6860&ms_comp_mtp&samsung_android#7&69f3c26&0&0000#{6ac27878-a6fa-4155-ba85-f98f491d4f33}\SID-{10001,SECZ9519043CHOHB,12351995904}\{0000000C-0000-0000-0000-000000000000}\{0000001B-0000-0000-0000-000000000000}\{0000001C-0000-0000-0000-000000000000}\{00000021-0000-0000-0000-000000000000} 
SFGAO_CANCOPY
SFGAO_CANMOVE
SFGAO_CANRENAME
SFGAO_CANDELETE
SFGAO_HASPROPSHEET
SFGAO_DROPTARGET
SFGAO_STREAM

最佳答案

参见 the answer I posted上个月在 C++Builder Journal 论坛上提出了同样的问题(来自您?)。简而言之,我在任何地方都能找到的唯一记录方法是检索父文件夹的 IContextMenu 界面,然后对所需文件调用 delete 动词。

关于c++ - 如何删除标记为 SFGAO_STREAM 的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7711205/

相关文章:

c++ - 当然有办法获得当前文件夹 View 的完整 View 下拉菜单吗?

c++ - 实现一个Windows资源管理器扩展 View 界面

c++ - 为什么取消引用多态指针将获得指针的类型而不是对象的类型?

c++ - gcc编译器无法安装R软件包lpSolve

c++ - 指向字符数组 C++ 的指针的问题

c++ - Flex Lexer 模式匹配句子分隔符/标点符号作为 URL 路径部分

multithreading - 使用Delphi TThread

delphi - 如何检测 TTreeViewItem 节点何时在 TTreeView 内展开?

delphi - 如何识别哪些代码正在生成 "' ' 不是有效的浮点值”错误对话框

windows - 如何获取特定桌面图标的 GUID?