3

我想要
从 AppData.Local 中获取一个 xml 文件,并将其序列化为一个列表


对错误部分的编码:

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

myTask 是一个简单的类:

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

objectStorageHelper 是CodePlex的 HelpClass , 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;
        }
    }

什么是错误

mscorlib.dll 中出现“System.UnauthorizedAccessException”类型的异常,但未在用户代码中处理

附加信息:访问被拒绝。(来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))

如果有这个异常的处理程序,程序可以安全地继续。

--
为什么会这样?<br/>我可以使用这个帮助类成功地写入文件。
但是为什么我没有读取文件的权限呢?
如何解决?

4

2 回答 2

0

改变

StorageFolder folder = GetFolder(storageType); 

StorageFolder folder = ApplicationData.Current.LocalFolder

如果这可行,那么问题出在您的文件夹权限上。

于 2012-06-20T09:35:59.477 回答
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() 一样

于 2012-09-25T13:46:04.927 回答