我有一个文件,我可以通过IShellFolder
通过pidl到达。此文件的标志为SFGAO_CANDELETE
,其父文件夹仅包含标记SFGAO_STORAGEANCESTOR
。
如何删除文件?
条件:
我尝试在pidl上调用SHFileOperation
,但它需要文件系统路径,而不是我拥有的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
答案 0 :(得分:2)
上个月在C ++ Builder Journal论坛上看到the answer I posted这个同样的问题(来自你?)。简而言之,我可以在任何地方找到的唯一记录的方法是检索父文件夹的IContextMenu
接口,然后在所需文件上调用delete
动词。
答案 1 :(得分:0)
使用IContextMenu是完全不好的主意,尽管它可以起作用。
类似的是,当你想要一杯咖啡时,你应该叫一个进入你家的男人为你做这件事。