0

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

一些帮助的代码:

如果我做:

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

有用。

但是,如果我尝试使用项目中包含的文件,如下所示:

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

它不起作用。该文件仍然是空的。

提前谢谢。

4

2 回答 2

3

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

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

于 2009-12-16T18:29:15.333 回答
0

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

另外,请注意以下建议。

创建 writer usingXmlWriter.Create并将其放置在 using 块中。

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

这允许在创建文本编写器时更加灵活,XmlReaderSettings如果需要,您可以通过。此外,使用完编写器后, using 块会处理 close/dispose 调用。

如果您在覆盖文件内容时遇到问题,请使用接受Stream.

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

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

于 2009-12-16T18:32:56.790 回答