我正在使用Windows 8 XAML/C#商店應用程序。我正嘗試在應用程序的生命週期中多次將Windows.Storage.ApplicationData.Current.LocalFolder
中的XML加載到XDocument
。但是,當我嘗試加載文件時,我收到System.UnauthorizedAccessException
。這裏是我的方法:我從磁盤加載XML時得到System.UnauthorizedAccessException
要添加到XML:
private async void AddCategoryButton_Click(object sender, RoutedEventArgs e)
{
XDocument CategoryListXDoc = await LoadXmlFromLocalFolderAsync("Categories.xml");
CategoryListXDoc.Element("CategoryList").Add(
new XElement("Category", new XAttribute("Id", Guid.NewGuid()), AddCategoryTextBox.Text));
SaveXDocToLocalFolderAsync("Categories.xml", CategoryListXDoc);
}
只是爲了調試的目的:
private async void Button_Click_2(object sender, RoutedEventArgs e)
{
XDocument TempXDoc = await LoadXmlFromLocalFolderAsync("Categories.xml");
Debug.WriteLine(TempXDoc);
}
加載和保存方法:
private async Task<XDocument> LoadXmlFromLocalFolderAsync(string FileName)
{
var LocalFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
StorageFile CategoryListFile = await LocalFolder.GetFileAsync(FileName);
var stream = await CategoryListFile.OpenStreamForReadAsync() as Stream;
XDocument TempXDoc = XDocument.Load(stream);
stream.Flush();
return TempXDoc;
}
private async void SaveXDocToLocalFolderAsync(string Filename, XDocument XDocToSave)
{
var LocalFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
StorageFile CategoryListFile = await LocalFolder.CreateFileAsync(Filename, CreationCollisionOption.ReplaceExisting);
var stream = await CategoryListFile.OpenStreamForWriteAsync() as Stream;
XDocToSave.Save(stream);
stream.Flush();
}
如果我火了Click
事件反覆出現,引發異常。沒有特定的情況。有時發生錯誤,有時不會發生。我哪裏錯了?我很新的async
和await
的東西。
所以,如果你只是導航到文件夾,你可以讀取文件? – awright18
你對該文件夾或文件的許可是什麼,並且你是否以管理員模式啓動VS? – Larry
'Click'事件一個接一個地發生?也許可能是兩個'LoadXmlFromLocalFolderAsync'在同一時間執行,或者當另一個嘗試使用該文件時該文件被某個線程持有的事實。 –