ApplicationData.Current.LocalFolder.CreateFileAsync выдает UnauthorizedAccessException

Я пытаюсь сохранить файл в хранилище приложения в приложении Windows Phone 8.1, но это всегда завершается с ошибкой System.UnauthorizedAccessException.

Исключение возникает в следующей строке (перед этим нет связанного кода):

StorageFile storageFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("test.xml", CreationCollisionOption.ReplaceExisting);

person rndsum    schedule 15.04.2014    source источник
comment
В какой момент вы пытаетесь создать файл?   -  person Ulugbek Umirov    schedule 15.04.2014
comment
Я делаю это в методе OnNavigatedTo страницы.   -  person rndsum    schedule 15.04.2014
comment
Вы ждете на этой линии? Или вы просто называете это так, как вы написали?   -  person Romasz    schedule 15.04.2014
comment
Да, я. Я обновил фрагмент кода, который я разместил выше, чтобы представить всю строку кода, которую я использую.   -  person rndsum    schedule 15.04.2014
comment
Поскольку он запускается асинхронно, проверьте, не пытается ли что-то еще использовать тот же файл. Также попробуйте установить точку останова на этой строке (или на строке раньше) и перешагнуть через нее — посмотрите, что произойдет.   -  person Romasz    schedule 15.04.2014
comment
Ничто другое внутри моего приложения не использует этот файл, у меня есть только одна строка кода, которая использует test.xml. Установив точку останова в этой строке, я вижу, что она выдает исключение вскоре после того, как я перешагиваю через нее (F10).   -  person rndsum    schedule 16.04.2014
comment
Я пробовал эту линию, и она работает нормально. Главный вопрос - какой проект вы пытаетесь построить? WP8 или WP8.1?   -  person Romasz    schedule 16.04.2014
comment
WP8.1, какой из них вы использовали? Я буквально создал новый проект типа Blank App (Windows Phone), добавил указанную выше строку в заглушку OnNavigatedTo MainPage и изменил этот метод на асинхронный, ничего больше.   -  person rndsum    schedule 16.04.2014
comment
Какой эмулятор или устройство вы используете для запуска кода? Вы пытались заменить ReplaceExisting другим вариантом?   -  person Adam    schedule 17.04.2014
comment
Я использую эмулятор Windows Phone 8.1. Я удалил Visual Studio и переустановил Visual Studio 2013 Update 2 RC и переустановил эмулятор из Visual Studio, но все равно не повезло, то же исключение. Исключения больше нет в чистом новом проекте, не знаю, как оно исчезло. Я заставил его уйти в моем проекте на короткое время после того, как я добавил и удалил возможность «локального хранилища». Когда я поиграл с ним какое-то время, он вернулся. :\   -  person rndsum    schedule 18.04.2014
comment
Я только что попробовал ваше предложение и изменил его с ReplaceExisting на GenerateUniqueName. Это заставило его работать, теперь я получаю исключение UnauthorizedAccessException при чтении этого файла.   -  person rndsum    schedule 18.04.2014
comment
Какую возможность «локального хранилища» вы используете? Я не вижу здесь ни одного локального хранилища: msdn. microsoft.com/en-us/library/windows/apps/hh464936.aspx   -  person Adam    schedule 18.04.2014
comment
Извините, я опечатался. Я включал/отключал функцию съемного хранилища. На самом деле я поделился кодом с другом, который запустил его на своем телефоне, и он не получает это исключение с точно таким же кодом. :/   -  person rndsum    schedule 19.04.2014
comment
В данный момент он снова работает. Раньше я вызывал CreateFileAsync из статического метода. Изменение этого метода на нестатический исправил это. Есть идеи, в чем причина этого?   -  person rndsum    schedule 20.04.2014


Ответы (1)


Наконец нашел проблему:

мне позвонили

Windows.Storage.ApplicationData.Current.LocalFolder.DeleteAsync()

в коде, который запускался один раз после установки приложения. Поэтому после этого все записи в эту папку завершались неудачей.

Я не уверен, почему GenerateUniqueName раньше исчезало исключение UnauthorizedAccessException, но, поскольку я не смог прочитать файл при использовании GenerateUniqueName, я предполагаю, что конкретный путь кода по какой-то причине никогда не вызывает это исключение, возможно, потому, что он предполагает, что никогда не может быть быть проблемой при использовании уникальных имен файлов.

person rndsum    schedule 21.04.2014
comment
Потрясающий! У меня была такая же проблема. Я бы никогда не нашел это без твоей подсказки. - person Christian Lang; 05.08.2014