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.*
几乎所有情况下的简化方法。)
<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.*
几乎所有情况下的简化方法。)