我正在使用xml格式的本地存储文件来保存收藏夹。当我向该文件添加内容并立即尝试读取该文件时,它会显示拒绝访问权限。 我知道已经有一个写入任务正在进行,这会阻止读取任务。 我试图手动等待任务,但每次执行时间不同,仍然显示错误。 我怎么处理这个?
将元素添加到XML文件:
StorageFile Favdetailsfile = await ApplicationData.Current.LocalFolder.GetFileAsync("FavFile.xml");
var content = await FileIO.ReadTextAsync(Favdetailsfile);
if (!string.IsNullOrEmpty(content))
{
var _xml = XDocument.Load(Favdetailsfile.Path);
var _childCnt = (from cli in _xml.Root.Elements("FavoriteItem")
select cli).ToList();
var _parent = _xml.Descendants("Favorites").First();
_parent.Add(new XElement("FavoriteItem",
new XElement("Title", abarTitle),
new XElement("VideoId", abarVideoId),
new XElement("Image", abarLogoUrl)));
var _strm = await Favdetailsfile.OpenStreamForWriteAsync();
_xml.Save(_strm, SaveOptions.None);
}
else if (string.IsNullOrEmpty(content))
{
XDocument _xml = new XDocument(new XDeclaration("1.0", "UTF-16", null),
new XElement("Favorites",
new XElement("FavoriteItem",
new XElement("Title", abarTitle),
new XElement("VideoId", abarVideoId),
new XElement("Image", abarLogoUrl))));
var _strm = await Favdetailsfile.OpenStreamForWriteAsync();
_xml.Save(_strm, SaveOptions.None);
}
}
阅读XML文件:
StorageFile Favdetailsfile = await ApplicationData.Current.LocalFolder.GetFileAsync("FavFile.xml");
var content = await FileIO.ReadTextAsync(Favdetailsfile);
int i=0;
if (!string.IsNullOrEmpty(content))
{
var xml = XDocument.Load(Favdetailsfile.Path);
foreach (XElement elm in xml.Descendants("FavoriteItem"))
{
FavoritesList.Add(new FavoritesData(i, (string)elm.Element("Image"), (string)elm.Element("Title"), (string)elm.Element("VideoId")));
i++;
}
希瓦
答案 0 :(得分:1)
保存xml时必须关闭流。上面“添加元素”部分中的两个代码块如下所示:
var _strm = await Favdetailsfile.OpenStreamForWriteAsync();
_xml.Save(_strm, SaveOptions.None);
应放入using
块:
using (var _strm = await Favdetailsfile.OpenStreamForWriteAsync())
{
_xml.Save(_strm, SaveOptions.None);
}