【问题标题】:C# XmlTextWriter class and VisualStudioC# XmlTextWriter 类和 VisualStudio
【发布时间】:2009-12-16 17:51:14
【问题描述】:

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

一些帮助代码:

如果我这样做:

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

它有效。

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

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

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

提前问好。

【问题讨论】:

  • 您能否分享一些您使用 XmlTextWriter 的代码,以及您期望的结果?
  • 请粘贴您的代码。您是否正确关闭了文件/流?我强烈推荐“使用”关键字,顺便说一句。
  • 写完后要关闭它吗?
  • 是的,我正在关闭作者。如果我使用绝对路径一直到项目中文件的位置,它就像一个魅力。但简单地输入文件名并没有任何作用。我以为是名称或位置,但我的 VS 没有抛出任何异常,我的程序运行良好。

标签: c# xml visual-studio xmltextwriter


【解决方案1】:

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

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

【讨论】:

  • 原来它确实在 .exe 文件旁边创建了文件。我必须提供文件的完整路径。
【解决方案2】:

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

另外,请注意以下建议。

使用XmlWriter.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 */ }

这让您可以更好地控制文件名冲突的处理方式。

【讨论】:

  • 谢谢史蒂夫,我听从你的建议。
猜你喜欢
  • 1970-01-01
  • 2012-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多