shell.NameSpace (путь) возвращает ноль, когда путь является папкой переносного устройства - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь переместить файлы с одного пути на другой, путь назначения должен поддерживать портативные устройства, такие как телефоны Android.

После обнаружения FolderBrowserDialog не поддерживает портативные устройства, я обнаружил этот блог, в котором объясняется, как использовать Shell32 и COM-Objects.

Проблема в том, что мне нужно сохранить путь (строку) и загрузить его обратно (из файла) как объект Folder, метод для этого заключается в использовании метода оболочки 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 голосов
/ 19 мая 2019

Так что, очевидно, мое устройство 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} части заставило его работать.

Я действительно не знаю, что означает эта часть (хотя это ссылка на внутреннее хранилище устройства), какие устройства генерируют ее и, более того, почему никто больше не писал о ней.

Но если кто-то еще столкнется с этим, я надеюсь, что это поможет:).

...