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

3
我有一个通过IShellFolder可以访问的文件。该文件具有标志SFGAO_CANDELETE,其父文件夹仅具有标志SFGAO_STORAGEANCESTOR

如何删除该文件?

条件:

  1. 文件和文件夹位于USB设备上(数码相机和手机)。
  2. 解决方案至少在WinXP上可用(支持Win2000将是非常好的)。
  3. 不使用WPD。

我尝试在pidl上调用SHFileOperation,但它需要一个文件系统路径,而不是GUID样式的路径。我在Experts Exchange上提出了这个问题,在那里我了解到了IFileOperation,但它需要Windows Vista。

示例:

父文件夹: 媒体::{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
要删除的文件: 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

1
欢迎来到Stack Overflow。我编辑了这个问题,添加了一些你在Experts Exchange上提问时学到的东西。我还删除了你关于获取文件大小和时间戳的第二个问题;它与如何删除文件无关。请在另一个问题中询问该问题,并让这个问题专注于删除。这样做可以更好地回答两个问题。 - Rob Kennedy
2个回答

2
查看上个月在C++Builder Journal论坛上发布的我发布的关于同样问题的答案。简而言之,我能找到的唯一记录的方法是检索父文件夹的IContextMenu接口,然后在所需文件上调用delete动作。

这也是我发现的。构建自定义数据对象并将其传递给IFileOperation似乎也不起作用。看来“删除”动词中有魔力。 - pcunite

0

使用IContextMenu是一个非常糟糕的想法,尽管它可以工作。

这就好比当你想要一杯咖啡时,你应该叫一个人来到你家里为你做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接