C#XmlTextWriter类和VisualStudio

时间:2009-12-16 17:51:15

标签: c# xml visual-studio xmltextwriter

我正在尝试在C#中使用XmlTextWriter类,但只有在我提供文件的完整路径时才会起作用(如“C:\ file.xml”)。如果我尝试使用相对路径(如“file.xml”),它会创建文件(在包含cs文件的同一文件夹中),但它不显示任何内容。在VS中的项目树中是否有任何属性我必须设置以便每次运行程序时都更新文件?

一些代码可以提供帮助:

如果我这样做:

XmlTextWriter f = new XmlTextWriter("C:/file.xml", null);

它有效。

但是如果我尝试使用项目中包含的文件,就像这样:

XmlTextWriter f = new XmlTextWriter("file.xml", null);

它不起作用。该文件仍为空。

提前做好准备。

2 个答案:

答案 0 :(得分:3)

您有责任为XMLWriter提供包含路径的有效文件名。此文件路径可以是相对路径或绝对路径。问题是,相对路径将对RUNTIME中当前目录的任何内容起作用,而不是您期望它在设计器中查看源代码。

特别是如果你只提供文件名 - 没有路径,那么可能会在.exe文件旁边创建具有指定名称的文件

答案 1 :(得分:0)

听起来像编写器内部的文件流没有被刷新到磁盘。当内部流达到一定大小时,这将自动发生,但我认为没有任何保证何时发生这种情况,或者有多少数据写入磁盘。我建议您在完成使用后调用编写器上的Close()Dispose(),并确保将其内容写入磁盘。

另外,请注意以下建议。

使用XmlWriter.Create创建编写器并将其放在使用块中。

using (XmlWriter writer = XmlWriter.Create(filename))
{ /* code that uses writer */ }

这样可以在创建文本编写器时提高灵活性,因为如果需要,可以传递XmlReaderSettings。此外,当您使用完编写器时,using块会处理关闭/处理调用。

如果您正在覆盖文件内容的问题,请使用接受Stream的构造重载。

using (XmlWriter writer = XmlWriter.Create(File.Open(filename, FileMode.Open))
{ /* code that uses writer */ }

这使您可以更好地控制如何处理文件名中的冲突。