2016-04-02 27 views
1

XDocumentオブジェクトを.xmlファイルとしてディスクに保存しようとしています。オブジェクトはデバッガでうまく形成されているように見えますが、実際のファイルを保存するだけの問題があります。ここに私がやっていることがあります:ディスクに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); 
      } 

     } 

私はこれを呼び出すときはいつでも、私はターゲットディレクトリにファイルがありません。

メモ:ディレクトリも整形式で、ファイル名も同じです。これはコードで確認されています。

答えて

2

おそらく、あなたは経路をひどく作成しています。コメント以下のそれはあなたがディレクトリとファイル名の間"\\"が欠落している

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

を持っています。

次のコードは問題なく動作します。 yoursefでパスを作成作成決してこのような状況を回避するために

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") 
+0

それはまさにそれでした!感謝の男;)上の良い答えと良い説明 –

関連する問題