2012-06-16 6 views
3

Я хочу
получить XML-файл из AppData.Local, и сериализовать его в списокПочему я не могу прочитать XML из AppData в WinRT?

Что код
Часть Ошибка:

List<myTask> AllTaskList = await objectStorageHelper.LoadAsync(); 

myTask является простой класс:

public class myTask 
{ 
    public string myTitle { get; set; } 
    public string myDuetime { get; set; } 
} 

объектStorageHelper - это Hel Pclass от CodePlex, то LoadAsync часть ниже:

public async Task<T> LoadAsync() 
    { 
     try 
     { 
      StorageFile file = null; 
      StorageFolder folder = GetFolder(storageType); 
      file = await folder.GetFileAsync(FileName()); 
      //file = await folder.CreateFileAsync("BetterTask.xml", CreationCollisionOption.OpenIfExists); 
      IRandomAccessStream readStream = await file.OpenAsync(FileAccessMode.Read); 
      Stream inStream = Task.Run(() => readStream.AsStreamForRead()).Result; 
      return (T)serializer.Deserialize(inStream); 
     } 
     catch (FileNotFoundException) 
     { 
      //file not existing is perfectly valid so simply return the default 
      return default(T); 
      //Interesting thread here: How to detect if a file exists (http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/1eb71a80-c59c-4146-aeb6-fefd69f4b4bb) 
      //throw; 
     } 
     catch (Exception) 
     { 
      //Unable to load contents of file 
      throw; 
     } 
    } 

Что такое ошибка

Исключение типа «System.UnauthorizedAccessException» произошло в mscorlib.dll, но не был обработан в пользовательском коде

Дополнительная информация:. Доступ запрещен (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED))

Если для этого исключения есть обработчик, программа может быть безопасно продолжена.

-
Почему это происходит
я могу использовать этот класс помощи, чтобы успешно выполнить запись в файл?.
Но почему у меня нет разрешения на чтение файла?
Как это решить?

+0

Может быть, это поможет: HTTP: // StackOverflow. com/a/5330436/1207991 – Gloopy

+0

имеет ли ваше приложение разрешение читать этот файл/каталог? – Fixus

ответ

0

изменение

StorageFolder folder = GetFolder(storageType); 

в

StorageFolder folder = ApplicationData.Current.LocalFolder 

, если это работает, то проблема с разрешениями папки.

0

изменение

Stream inStream = Task.Run(() => readStream.AsStreamForRead()).Result; 
return (T)serializer.Deserialize(inStream); 

в

using (Stream inStream = Task.Run(() => readStream.AsStreamForRead()).Result) 
{ 
    return (T)this.xmlSerializer.Deserialize(inStream); 
} 

или

inStream.Flush(); 
inStream.Dispose(); 

и то же самое с SaveAsync()

+1

Хорошее предложение, но на самом деле он не отвечает на вопрос –

Смежные вопросы