C++ 如何删除标记为SFU流的对象?

C++ 如何删除标记为SFU流的对象?,c++,delphi,windows-shell,C++,Delphi,Windows Shell,我有一个可以通过pidl通过IShellFolder访问的文件。此文件具有标志SFGAO\u CANDELETE,其父文件夹仅具有标志SFGAO\u storageconsensort 如何删除该文件 条件: 文件和文件夹位于USB设备(数码相机和手机)上 一个解决方案至少应该在WinXP上运行(Win2000支持将非常好) 没有使用WPD 我尝试调用pidl,但它需要一个文件系统路径,而不是GUID样式的路径,我从中了解到,但这需要Windows Vista 样本: parent folder

我有一个可以通过pidl通过
IShellFolder
访问的文件。此文件具有标志
SFGAO\u CANDELETE
,其父文件夹仅具有标志
SFGAO\u storageconsensort

如何删除该文件

条件:

  • 文件和文件夹位于USB设备(数码相机和手机)上
  • 一个解决方案至少应该在WinXP上运行(Win2000支持将非常好)
  • 没有使用WPD
  • 我尝试调用pidl,但它需要一个文件系统路径,而不是GUID样式的路径,我从中了解到,但这需要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 父文件夹:: 媒体:{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\\\\\ \usb\vid\U 04e8&pid\U 6860&ms\U comp\U mtp&samsung\U android\7&69f3c26&0&0000\6ac27878-a6fa-4155-ba85-f98f491d4f33}\SID-{10001,SECZ9519043HB,12351995904亿C-0000-000000000000 SFGAO_CANCOPY 斯福加乌坎莫夫酒店 SFGAO_CANRENAME 斯夫加乌坎德莱特酒店 SFGAO_HASPROPSHEET SFGAO_DROPTARGET SFGAO_ SFU文件夹 SFGAO_HASSUBFOLDER SFGAO_内容掩码 要删除的文件: 一些呼吸。mp3:::{20 0 0 0 4 4 FE0-0 0-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7878-6-5-5-5-85-F98F98F414141414 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 7 7 7 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 5-5-5-85-85-85-85-85-85-85-85-85-85-85-000000000000}\{00000021-0000-0000-0000-000000000000} SFGAO_CANCOPY 斯福加乌坎莫夫酒店 SFGAO_CANRENAME 斯夫加乌坎德莱特酒店 SFGAO_HASPROPSHEET SFGAO_DROPTARGET 斯法加乌河
    看看这个(你?)同样的问题简而言之,我在任何地方都能找到的唯一有文档记录的方法是检索父文件夹的
    IContextMenu
    界面,然后调用所需文件上的
    delete
    动词。

    使用IContextMenu完全是个坏主意,尽管它可以工作


    类似的情况是,当你想喝一杯咖啡时,你应该给家里来的人打电话,为你做这件事。

    欢迎来到Stack Overflow。我编辑了这个问题,添加了你在专家交流上问这个问题时学到的一些东西。我还删除了你关于获取大小和时间戳的第二个问题;这没有什么可讨论的如何删除该文件。请在单独的问题中询问该问题,并让这一问题只关注删除。这样,您将对这两个问题获得更好的答案。这也是我发现的。构建自定义数据对象并将其传递给IFileOperation似乎确实可行。似乎“删除”动词中有魔力。