【问题标题】:c# DataSet.WriteXml(fileStream, XmlWriteMode.IgnoreSchema); corrupts my xml filec# DataSet.WriteXml(fileStream, XmlWriteMode.IgnoreSchema);损坏了我的 xml 文件
【发布时间】:2017-07-04 19:35:51
【问题描述】:
<Data>
  <configs>
    <someEntry>"value1"</someEntry>
  </configs>
  <profiles>
    <someEntry>"value2"</someEntry>
  </profiles>
</Data>es>
    <someEntry>"value3"</someEntry>
  </profiles>
</Data>

&lt;/Data&gt;es&gt; 是问题所在。 当我尝试在此示例中删除“value3”DataRow 时会发生这种情况。 Visual Studio 的 DataTable Visualizer 显示我的表很好,但 DataSet 以这种方式保存,尽管它应该是这样的:

<Data>
  <configs>
    <someEntry>"value1"</someEntry>
  </configs>
  <profiles>
    <someEntry>"value2"</someEntry>
  </profiles>
</Data>

在开始使用 FileStream 之前,一切都按预期工作。这就是我启动 FileStream 的方式:

FileStream filestream = new FileStream(xmlLocation, FileMode.Open, FileAccess.ReadWrite);

【问题讨论】:

    标签: c# .net xml filestream


    【解决方案1】:

    您正在使用FileMode.Open,如果文件已经存在,它不会截断文件。

    只需改用File.Create

    using (var stream = File.Create(directory))
    {
        ...
    }
    

    (您可以指定FileMode.Create,因为您的帖子最初在您编辑之前就有了,但我发现在几乎所有情况下调用File.*简化方法要简单得多。)

    【讨论】:

    • 其实我的 FileStream 是一个全局对象,所以我不能用using 来做,而且还有一个流只负责文件的创建,然后它就被处理掉了。跨度>
    • @ΔημήτρηςΕπανωμή:老实说,这对我来说听起来是个坏主意——如果可以在整个代码中使用相同的流,那么正确处理它就会变得更加困难。但从根本上说,您要确保在重写文件时截断所有当前内容。
    • 感谢您的宝贵时间。我明天会试试这个,我会回帖。
    猜你喜欢
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多