当path是便携式设备的文件夹时,shell.NameSpace(path)返回null

时间:2019-05-17 18:39:57

标签: c# .net shell32

我正在尝试将文件从一个路径移动到另一路径,目标路径需要支持诸如android手机之类的便携式设备。

发现FolderBrowserDialog不支持便携式设备后,我发现了this博客,该博客解释了如何使用Shell32COM-Objects

问题是我需要存储路径(字符串)并作为Folder对象从文件中加载回来(这样做的方法)是使用shell方法shell.NameSpace(path)。 这仅适用于系统路径,否则它将返回null:

 shell = new Shell();
 Folder folder = shell.BrowseForFolder((int) Handle, "Select folder", 0, 0);
 Folder folderFromPath = shell.NameSpace((folder as Folder3).Self.Path);
 //folderFromPath is null if I choose android device folder.

这可行:

Folder folderFromPath = shell.NameSpace("C:\\Program Files");
 //folderFromPath is not null

还有另一种方法吗?

1 个答案:

答案 0 :(得分:0)

因此,显然我的android设备会生成以下路径: ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\usb#vid_2717&pid_ff40#329682240804#{6ac27878-a6fa-4155-ba85-f98f491d4f33}\SID-{10001,,54091657216}\{46DD6D4D-0000-0000-0000-000000000000}

将此路径传递给shell.NameSpace方法无效,但由于某些未知原因 删除SID-{10001,,54091657216}部分就可以了。

我真的不知道这部分是什么意思(尽管它是设备内部存储的参考),哪些设备生成了它,而且,为什么没有其他人发布。

但是如果有人遇到这个问题,我希望这会有所帮助:)。