我有一个文件,可以通过pidt通过IShellFolder到达。该文件具有标志SFGAO_CANDELETE,其父文件夹仅具有标志SFGAO_STORAGEANCESTOR

如何删除文件?

条件:

  • 文件和文件夹位于USB设备(数码相机和电话)上。
  • 一个解决方案至少应该在WinXP上有效(Win2000支持会很棒)
  • 不使用WPD。

  • 我尝试在pidl上调用 SHFileOperation ,但它需要文件系统路径,而不是我具有的GUID样式路径。 I asked about this on Experts Exchange,是我了解 IFileOperation 的地方,但这需要Windows Vista。

    样品:

    上层资料夹::
    媒体:: {20D04FE0-3AEA-1069-A2D8-08002B30309D} \\\?\ usb#vid_04e8&pid_6860&ms_comp_mtp&ssamsung_android#7&69f3c26&0&0000#{6ac27878-a6fa-4155-ba85-f98f491d4f33},-CID {1995} 0000-0000-0000-000000000000}
    SFGAO_CANCOPY
    SFGAO_CANMOVE
    SFGAO_CANRENAME
    SFGAO_CANDELETE
    SFGAO_HASPROPSHEET
    SFGAO_DROPTARGET
    SFGAO_STORAGEANCESTOR
    SFGAO_FOLDER
    SFGAO_HASSUBFOLDER
    SFGAO_CONTENTSMASK

    删除文件:
    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} {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

    最佳答案

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

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

    10-10 16:56