c# DataSet.WriteXml(文件流, XmlWriteMode.IgnoreSchema);破坏了我的 xml 文件

c# DataSet.WriteXml(fileStream, XmlWriteMode.IgnoreSchema); corrupts my xml file

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

</Data>es> 就是问题所在。 在此示例中,当我尝试删除 "value3" DataRow 时会发生这种情况。 Visual Studio 的 DataTable Visualizer 显示我的 table 没问题,但 DataSet 以这种方式保存,尽管它应该是这样的:

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

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

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

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

只需使用 File.Create 即可:

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

(您 可以 指定 FileMode.Create 代替,正如您的 post 在您编辑它之前最初拥有的那样,但我发现调用 File.* 几乎所有情况下的简化方法。)