将 XML 文件保存到磁盘

Posted

技术标签:

【中文标题】将 XML 文件保存到磁盘【英文标题】:Saving XML file to disk 【发布时间】:2016-07-22 07:47:29 【问题描述】:

我正在尝试将 XDocument 对象作为 .xml 文件保存到磁盘。该对象在调试器中似乎格式良好,我只是在保存实际文件时遇到问题。这是我正在做的事情:

       //ofx is an `XElement` containing many sub-elements of `XElement` type
        XDocument document = new XDocument(ofx);

        XmlWriterSettings settings = new XmlWriterSettings();
        settings.OmitXmlDeclaration = true;
        settings.Indent = true;

        //destinationPath is a string containing a path, like this
        // e.g : "C:\\Users\\Myself\\Desktop"  
        using (var stream = File.Create(destionationPath + @"export.xml"))
        
            List<byte[]> header = new List<byte[]>();

            byte[] newline = Encoding.ASCII.GetBytes(Environment.NewLine);

            List<string> headers = new List<string>();
            headers.Add("foo"); 

            // Just adding some headers here on the top of the file. 
            // I'm pretty sure this is irrelevant for my problem

            foreach (string item in headers)
            
                header.Add(Encoding.ASCII.GetBytes(item));
                header.Add(newline);
            

            header.Add(newline);

            byte[] bytes = header.SelectMany(a => a).ToArray();

            stream.Write(bytes, 0, bytes.Length);
            using (var writer = XmlWriter.Create(stream, settings))
            
                document.Save(writer);
            

        

每当我调用它时,目标目录中都没有文件。

注意:目录和文件名也是格式正确的。这在代码中得到了验证。

【问题讨论】:

【参考方案1】:

您可能正在错误地创建路径。按照你的评论

string destionationPath = "C:\\Users\\Myself\\Desktop";
destionationPath + @"export.xml" // evaluates to: "C:\\Users\\Myself\\Desktopexport.xml"

您在目录和文件名之间缺少"\\"

以下代码对我来说很好用。

namespace TestApp

    class Program
    
        static void Main(string[] args)
        
            Tmp();
        

        public static void Tmp()
        

            //ofx is an `XElement` containing many sub-elements of `XElement` type
            XDocument document = new XDocument(new XElement("myName", "myContent"));

            XmlWriterSettings settings = new XmlWriterSettings();
            settings.OmitXmlDeclaration = true;
            settings.Indent = true;

            //destinationPath is a string containing a path, like this
            // e.g : "C:\\Users\\Myself\\Desktop"  
            string destionationPath = "D:\\Temp\\xml_test\\";
            using (var stream = File.Create(destionationPath + @"export.xml"))
            
                List<byte[]> header = new List<byte[]>();

                byte[] newline = Encoding.ASCII.GetBytes(Environment.NewLine);

                List<string> headers = new List<string>();
                headers.Add("foo");

                // Just adding some headers here on the top of the file. 
                // I'm pretty sure this is irrelevant for my problem

                foreach (string item in headers)
                
                    header.Add(Encoding.ASCII.GetBytes(item));
                    header.Add(newline);
                

                header.Add(newline);

                byte[] bytes = header.SelectMany(a => a).ToArray();

                stream.Write(bytes, 0, bytes.Length);
                using (var writer = XmlWriter.Create(stream, settings))
                
                    document.Save(writer);
                
            
        
    

为了避免这种情况永远不要由你自己创建创建路径。改用Path 类:

Path.Combine(destionationPath, @"export.xml")

【讨论】:

嗯,就是这样!谢谢男人;)很好的答案和很好的解释

以上是关于将 XML 文件保存到磁盘的主要内容,如果未能解决你的问题,请参考以下文章

使用 Delphi 2007 将 Base64 字符串作为二进制文件保存到磁盘

Alamofire 没有将文件保存到磁盘

保存文件格式

uinty中对Xml文件的操作

SceneKit:将 scn 文件保存到磁盘

如何将文件保存到磁盘?