【发布时间】:2012-11-19 13:15:38
【问题描述】:
我有一个包含 XML 的 StorageFile。我从 StorageFile 中读取 XML,然后对其进行编辑,然后使用以下代码将其再次保存到 StorageFile:
using (var writeStream = await storageFile.OpenStreamForWriteAsync())
{
xDocument.Save(writeStream, SaveOptions.None);
}
但是,当我缩短内容时,例如来自
<Node>
<Child>This is a verrrrrryyy long text</Child>
<Node>
到
<Node>
<Child>This is short</Child>
<Node>
磁盘上的结果如下:
<Node>
<Child>This is short</Child>
<Node>rrryyy long text</Child>
<Node>
显然,Stream 只将新字节写入文件中,而将旧字节保持原样,从而在我下次尝试打开它时导致 XML 无效,因此这可能不是正确的保存方式...
我应该如何保存它?
【问题讨论】:
-
读取数据时是否反序列化?
-
读取 StorageFile 时的代码:
XmlDocument xmlDocument = await XmlDocument.LoadFromFileAsync(storageFile);XDocument xDocument = XDocument.Parse(xmlDocument.GetXml()); -
我建议您通过以下链接查看序列化和反序列化:- msdn.microsoft.com/en-us/library/ms731073.aspx 我没有遇到像您这样的问题。
-
感谢您的提示,但我不是在读/写一个可序列化的类,只是一个 xml。关于如何在那种情况下保存它的任何线索?
-
解决方案是截断流:
using (var writeStream = await f.OpenStreamForWriteAsync()) { if (writeStream.CanSeek && writeStream.Length > 0) writeStream.SetLength(0); _xml.Save(writeStream, SaveOptions.None); }
标签: windows-runtime xml-serialization storagefile