【问题标题】:Writing a shorter stream to a StorageFile将较短的流写入 StorageFile
【发布时间】: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 &amp;&amp; writeStream.Length &gt; 0) writeStream.SetLength(0); _xml.Save(writeStream, SaveOptions.None); }

标签: windows-runtime xml-serialization storagefile


【解决方案1】:

解决方案是截断流:

using (var writeStream = await f.OpenStreamForWriteAsync()) 
{ 
   if (writeStream.CanSeek && writeStream.Length > 0) 
      writeStream.SetLength(0); 
   _xml.Save(writeStream, SaveOptions.None); 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-06
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 2016-04-16
    相关资源
    最近更新 更多