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

时间:2011-10-10 10:06:03

标签: c++ delphi windows-shell

我有一个文件,我可以通过IShellFolder通过pidl到达。此文件的标志为SFGAO_CANDELETE,其父文件夹仅包含标记SFGAO_STORAGEANCESTOR

如何删除文件?

条件:

  1. 文件和文件夹位于USB设备(数码相机和手机)上。
  2. 解决方案至少应该在WinXP上运行(Win2000支持会非常棒)
  3. 不使用WPD。
  4. 我尝试在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
    

2 个答案:

答案 0 :(得分:2)

上个月在C ++ Builder Journal论坛上看到the answer I posted这个同样的问题(来自你?)。简而言之,我可以在任何地方找到的唯一记录的方法是检索父文件夹的IContextMenu接口,然后在所需文件上调用delete动词。

答案 1 :(得分:0)

使用IContextMenu是完全不好的主意,尽管它可以起作用。

类似的是,当你想要一杯咖啡时,你应该叫一个进入你家的男人为你做这件事。