我尝试在C#中使用XmlTextWriter类,但它只有在我给出文件的完整路径(如"C:\file.xml")时才起作用。如果我尝试使用相对路径(如"file.xml"),它会创建文件(在包含cs文件的同一文件夹中),但不显示任何内容。在VS中的项目树中是否有我必须设置的属性,以便每次我运行程序时文件都会更新?
以下是一些有用的代码:
如果我这样做了:
XmlTextWriter f = new XmlTextWriter("C:/file.xml", null);它起作用了。
但如果我尝试使用项目中包含的文件,如下所示:
XmlTextWriter f = new XmlTextWriter("file.xml", null);它不起作用。该文件仍为空。
提前做好准备。
发布于 2009-12-17 02:29:15
您有责任为XMLWriter提供包括路径在内的有效文件名。此文件路径可以是相对路径,也可以是绝对路径。问题是,相对路径将在运行时针对当前目录的任何位置工作,而不是您期望它在设计器中查看源代码的位置。
特别是,如果只给出文件名而不给出路径,则可能会在.exe文件旁边创建具有指定名称的文件
发布于 2009-12-17 02:32:57
听起来像是编写器内部的文件流没有被刷新到磁盘。当内部流达到一定大小时,这将自动发生,但我不认为有任何保证,何时会发生这种情况,或者有多少数据写入磁盘。当您使用完编写器并希望确保其内容被写入磁盘时,我建议您在编写器上调用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 */ }这使您可以更好地控制如何处理文件名中的冲突。
https://stackoverflow.com/questions/1916414
复制相似问题