2011-10-10 35 views
3

我有一个文件,我可以通过pidl通过IShellFolder达到。该文件的标记为SFGAO_CANDELETE,其父文件夹只有标记SFGAO_STORAGEANCESTOR如何删除标记为SFGAO_STREAM的对象?

如何删除文件?

条件:

  1. 文件和文件夹的USB设备(数码相机和手机)上。
  2. 一个解决方案应该至少在WinXP上工作(Win2000支持将是美好的)
  3. 没有使用WPD。

我试着在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 
+1

欢迎来到Stack Overflow。我已经编辑了这个问题来添加一些你在专家交流中询问过的内容。我还删除了关于获取大小和时间戳的第二个问题;它与如何删除文件无关。请在单独的问题中提出有关该问题的问题,并让这个问题仅仅关注于删除。这样你会得到更好的答案。 –

回答

2

在C++ Builder的杂志论坛见the answer I posted这个非常相同的问题(从你?)上个月。简而言之,我可以在任何地方找到的唯一记录方式是检索父文件夹的IContextMenu界面,然后在所需的文件上调用delete动词。

+0

这也是我找到的。构建一个自定义数据对象并将它传递给IFileOperation似乎工作。似乎在“删除”动词中有魔力。 – pcunite

0

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

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