Доступ к файлу запрещен при втором запуске приложения

Я столкнулся со странной проблемой при попытке доступа к файлу на SD-карте с помощью кода:

var path = @"D:\Test\test.txt";
try
{
    StorageFile file = await StorageFile.GetFileFromPathAsync(path);
}
catch (Exception ex) { Debug.WriteLine($"File access failed due to {ex.Message}"); }

path = @"Test\test.txt";
StorageFile file2 = await (await KnownFolders.RemovableDevices.GetFoldersAsync()).FirstOrDefault().GetFileAsync(path);

Файл находится на SD-карте, я объявил возможность RemovableStorage и добавил FileTypeAssociation. Я могу получить файл при первой отладке приложения, но при втором запуске я получаю UnauthorizedException с первым StorageFile. Удивительно, но вторая попытка получить файл через RemovableStorage срабатывает каждый раз. Если только перезагрузить телефон и еще раз отладить приложение - оно снова заработает, но пока только в первый раз.

Доступ к файлам с помощью StorageFile.GetFileFromPathAsync() как-то ограничен? Я что-то упускаю?


ОБНОВЛЕНИЕ:

Похоже, что в новейшей версии эмулятора 10856 я получаю исключение при каждом запуске, что может означать, что не будет доступа к файлу по полному пути.


person Romasz    schedule 21.11.2015    source источник


Ответы (1)


Средство выбора разрешает доступ, поскольку пользователь предоставил вам файл, а не путь. Приложение winstore не должно зависеть от схемы диска/папки пользователя, поэтому у вас нет прав доступа к файлам по абсолютному пути. В этом случае мы должны сначала разрешить доступ к съемным устройствам в файле манифеста, затем мы должны использовать системную папку RemovebleDevices для доступа к файлам допустимых типов.

Также странно, что вы можете работать с абсолютным путем в первый раз. На моем тестовом устройстве я всегда получаю ошибку UnauthorizedAccessException и «Доступ запрещен» при использовании абсолютного пути. Мое устройство сборки 10586.11.

person Fangfang Wu - MSFT    schedule 25.11.2015
comment
Похоже, что после обновления VS и тестирования на эмуляторе 10856 я также получаю исключение при каждом запуске. - person Romasz; 05.12.2015