我有一个文件,我可以通过 IShellFolder
通过 pidl 访问它。此文件具有标志 SFGAO_CANDELETE
,其父文件夹仅具有标志 SFGAO_STORAGEANCESTOR
。
如何删除文件?
条件:
- 文件和文件夹位于 USB 设备(数码相机和手机)上。
- 一个解决方案应该至少在 WinXP 上有效(最好支持 Win2000)
- 不使用 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/