Windows Phone Silverlight 8.1 Приложение Доступ для записи на SD-карту

С появлением Windows Phone 8.1 теперь у него есть доступ на запись к SD-карте устройства Windows Phone 8.1:

MSDN: Windows Phone 8.1 Access SD-карта

Вы указываете возможность removeableStorage и регистрируетесь для желаемых расширений файлов, которые вы должны обрабатывать, и вы можете просматривать файлы и папки SD-карты.

У меня вопрос, как создать новый файл внутри SD-карты, если он не существует? Мне удалось сделать это с помощью следующего после просмотра закрытого члена m_internalFolderPath из ExternalStorageFolder:

File.Open("D:\\test.txt", FileMode.OpenOrCreate);

Но нормально ли использовать "D:" в качестве корневого пути для SD-карты? Я не могу найти ссылку на это онлайн. Является ли буква "D:" устройством / поставщиком, или я должен доверять ей как букве для SD-карты?

2 ответа

Решение

Создание файла через путь, начинающийся с D:

File.Create(@"D:\test.txt");

будет работать в большинстве случаев, но нигде не сказано, что ОС будет назначать буквы D для SD-карты (думал, что на самом деле я не видел других). Но чтобы быть уверенным, вы всегда можете получить доступ к SD-карте через StorageFolder:

StorageFolder SDDevice = Windows.Storage.KnownFolders.RemovableDevices;
StorageFolder sdCard = (await SDDevice.GetFoldersAsync()).FirstOrDefault();
await sdCard.CreateFileAsync("test.txt", CreationCollisionOption.ReplaceExisting)

Чтобы все вышеперечисленное сработало, вам нужно объявить Capabilities и FileTypeAssociations в файле package.appxmanifest.

Существует небольшая проблема с VS и Windows Phone 8.1 Silverlight - вам нужно будет вручную добавить FileTypeAssociations.

Все написанное выше правильно, но есть несколько ошибок, о которых вам нужно знать. В последние несколько дней я рвал на себе волосы с несколькими периодически возникающими проблемами, наиболее заметной из которых была ошибка ACCESS_DENIED при простом вызове Windows.Storage.KnownFolders.RemovableDevices со всем, что настроено в соответствии с документацией.

1... Во-первых, важно понимать, что вам нужно, по крайней мере, ОДИН fileTypeAssociation в манифесте, чтобы даже вызвать первую строку Windows.Storage.KnownFolders.RemovableDevices. 2... Во-вторых, чтобы зарегистрировать любые изменения вашего fileTypeAssociations в вашем файле mainfest, ВЫ ДОЛЖНЫ УДАЛИТЬ приложение на устройстве или эмуляторе, прежде чем нажимаете Debug (это вызывало у меня много часов проблем, в основном из-за того, что я не был уверен, что fileTypeAssociation нужно было просто достать ручку до SD-карты).

Надеюсь, это поможет спасти несколько прядей волос.

Другие вопросы по тегам