Чтение / запись файла в расширении пространства имен оболочки с использованием API-интерфейсов оболочки
Я использовал SHGetDesktopFolder(), чтобы получить PIDL, а затем просмотрел его содержимое с помощью IShellFolder.
Теперь у меня есть конкретный PIDL, ссылающийся на местоположение файловой системы, и я могу использовать BindToStorage и IStorage для.OpenStream() и.Write() файла.
Это все хорошо, если интересные вещи живут в файловой системе, а более интересные - в "Расширениях пространства имен оболочки".
В частности, у меня есть устройство Pocket PC 2002 (в частности, Symbol PDT8146), которое подключено к моей машине с Windows 7 с помощью Центра устройств Windows Mobile. Это приложение создает папку пространства имен оболочки, которую я могу использовать из проводника для чтения / записи файлов в нее.
Чего я не могу сделать, так это записать в него файлы с помощью командной строки или Win32 API.
Следуя стратегии, которую я изложил выше, я могу получить экземпляр PIDL и IShellFolder, ссылающийся на устройство, и могу перечислить его файлы. Однако IShellFolder.BindToStorage() завершается ошибкой с "Нет такого интерфейса поддерживается", когда я пытаюсь получить доступ к IStorage.
Есть ли другой интерфейс оболочки, который я должен исследовать для чтения / записи файлов на этом упрямом устройстве?
1 ответ
Попробуйте IShellFolder.BindToObject:
IStream *stream;
if (FAILED(shellfolder->BindToObject (pidl, NULL, IID_IStream, &stream)))
return E_FAIL;
Но я не уверен, что это работает и с записью файлов.