2017-04-11 84 views
1

所以我有這個代碼塊是If/Else的一部分,如果正在寫入的文件已經存在,它應該附加到文檔。但它似乎是添加了一個新的xml聲明和根元素,就好像它是一個新文件一樣。代碼如下所示:XDocument將新文檔聲明添加到XML文件

{ 
    FileStream fs = new FileStream(configFile, FileMode.Open); 
    XDocument xD = XDocument.Load(fs); 
    XElement root = xD.Element("Store"); 
    root.Add(
      new XElement("template", new XElement("filePath", tmp.TempPath), 
      new XElement("Name", tmp.TempName), 
      new XElement("description", tmp.TempDesc))); 
    xD.Save(fs); 
    fs.Flush(); 
    fs.Dispose(); 
} 

在此塊的第二遍,就出現了錯誤,指出存在的文件中一個無效的XML聲明.....它看起來像這樣:

<?xml version="1.0" encoding="utf-8"?> 
<Store> 
    <template> 
    <filePath>.\templates\balls.html</filePath> 
    <Name>Balls</Name> 
    <description>Benoit</description> 
    </template> 
</Store><?xml version="1.0" encoding="utf-8"?> 
<Store> 
    <template> 
    <filePath>.\templates\balls.html</filePath> 
    <Name>Balls</Name> 
    <description>Benoit</description> 
    </template> 
    <template> 
    <filePath>.\templates\benoit.html</filePath> 
    <Name>benoit</Name> 
    <description>balls</description> 
    </template> 
</Store> 

我有一個偷偷摸摸的懷疑,我沒有正確使用LINQ的XML。

回答

2

您正在追加XML到同一個文件而不是覆蓋文件。

選項來解決:

  • 尋求文件回到起點
  • 重新打開文件

    // load and close stream 
    XDocument xD; 
    using(var fs = new FileStream(configFile, FileMode.Open)) 
    { 
        xD = XDocument.Load(fs); 
    } 
    
    // modify document 
    XElement root = xD.Element("Store"); 
    root.Add(
         new XElement("template", new XElement("filePath", tmp.TempPath), 
         new XElement("Name", tmp.TempName), 
         new XElement("description", tmp.TempDesc))); 
    
    // open stream again and save XML 
    using(var fs = new FileStream(configFile, FileMode.Open)) 
    { 
        xD.Save(fs); 
    } 
    
+0

OMG這是完美的!謝謝! –