C#XmlTextWriter无法写入文件

时间:2018-11-07 18:53:08

标签: c# xml

我XmlTextWriter类有问题,我无法写入文件。

这是我正在创建的控制台应用程序,其功能如下所示。

private void WriteXML()
    {
        Console.WriteLine("Writing");
        using (XmlTextWriter writer = new XmlTextWriter("DataW.xml", System.Text.Encoding.UTF8))
        {
            writer.Formatting = Formatting.Indented;
            writer.WriteStartDocument();
            writer.WriteComment("This is a comment");
            writer.WriteStartElement("WeeklyReview");

            writer.WriteStartElement("DateTime");
            writer.WriteStartAttribute("DateTime","09/04/2018 05:00");
            writer.WriteElementString("Activity", "At Theodor");
            writer.WriteElementString("Social", "Not Theodor,Theodor");
        }
    }

我得到的结果只是一个没有任何内容的文件。在VS 2017中,文件显示为白色背景,里面没有任何内容。

我要写入的文件位于解决方案资源管理器中,并且与我正在读取的文件位于同一位置。

2 个答案:

答案 0 :(得分:6)

我猜您看到的问题是创建的XML文件为空白或不完整。如果是这样,请在代码周围添加一个using语句,如下所示:

using (XmlTextWriter writer = new XmlTextWriter("DataW.xml", System.Text.Encoding.UTF8))
{
    writer.Formatting = Formatting.Indented;
    writer.WriteStartDocument();
    writer.WriteComment("This is a comment");
    writer.WriteStartElement("Weekly Review"); //NB: A space in an element name!

    writer.WriteStartElement("DateTime");
    writer.WriteStartAttribute("09/04/2018 05:00"); //NB: a value given as an attribute name (consider: WriteAttributeString)!
    writer.WriteElementString("Activity", "At Theodor");
    writer.WriteElementString("Social", "Not Theodor,Theodor");
}

出现此问题的原因是您正在调用的方法写到基础流而不是文件系统。为了确保将数据写入文件系统,您需要调用Flush方法。当编写器关闭/处置时,将自动调用Flush(但在完成时不会调用)。 using语句可确保始终正确处置writer,从而确保将流刷新到磁盘。

对于其他任何问题,您可能会引发异常(例如,是否存在文件写入目标位置的文件访问问题)。如果您收到例外情况,请分享该消息,我们可以为您推荐解决方案。


ps。在下面给出了由此创建的XML,它不是有效的XML,因此您还会遇到其他问题。我会将这些问题留给您解决,或者如果您在那里遇到问题,则由另一个问题提出。同时,您可以从文档中的示例中得到一些提示:https://docs.microsoft.com/en-us/dotnet/api/system.xml.xmltextwriter.writestartattribute?view=netframework-4.7.2

<?xml version="1.0" encoding="utf-8"?>
<!--This is a comment-->
<Weekly Review>
  <DateTime 09/04/2018 05:00="">
    <Activity>At Theodor</Activity>
    <Social>Not Theodor,Theodor</Social>
  </DateTime>
</Weekly Review>

答案 1 :(得分:0)

我知道这个问题很旧,但在 VB.net 中我得到了相同的结果。

我必须在最后调用 pi@node3:~ $ docker --version Docker version 20.10.7, build f0df350 才能在我的文件中获取内容。