2012-06-29 45 views
0

在我的程序中,我正在檢查xml文件是否存在。如果文件不存在,我只需在指定的目錄中創建它,然後嘗試將另一個xml的內容複製到新的xml文件中。同樣,如果文件存在,我將複製另一個文件的內容並覆蓋現有文件。當我運行我的應用程序並檢查目錄時,我想要外部xml代碼複製的文件也說:「XML文檔必須具有頂級元素,處理資源時出錯」。XML文件複製問題c#「XML文檔必須具有頂級元素。處理資源時出錯」

到目前爲止,我已經嘗試過:System.IO.File.Copy(sourceFile,targetPath);用於文件複製。

我的代碼塊類似於此:

string sourceFile= "C:\\fileIWantToCopy.xml; 
string targetpath= "C:\\NeedsFilledWithSourceContents.xml; 

if (File.Exists(targetPath) == false) { 
    File.Create(targetPath); 
    System.IO.File.Copy(sourceFile, targetPath, true); 
} else { 
    System.IO.File.Copy(sourceFile, targetPath, true); 
} 

XDoc.Save(String.Format(targetPath)); 

再次我只是需要我怎麼可以在一個XML文件中的內容複製到一些技巧又一新的,新創建一個沒有「XML文檔必須有一個頂級元素。錯誤處理資源「錯誤。我的源代碼XML文檔的第一行是:

<? xml version =「1.0」encoding =「utf-8」? >

然後繼續具有典型的頭部/身體結構。

在將任何內容複製到新文件之前,是否需要將內容寫入新文件?

感謝

+1

不是一個XML元素。每個XML文檔必須只有一個根元素。如果您有 ... ...,那麼有兩個頂級元素,這是無效的。 –

+1

XDoc究竟是什麼?你看起來像你試圖將某些東西保存到一個文件中,但我們不知道它是什麼,也不知道你爲什麼先複製文件... – Kek

+0

不客氣。此外,由於您是StackOverflow的新用戶,因此我想告訴您,您可以通過查看答案旁邊的勾號來獲得最佳答案並接受最能幫助您的答案。在這個網站上upvote或接受的答案算作「謝謝」。 –

回答

3

要麼使用System.IO文件操作複製現有的文件或保存XDocument您在內存有。但是做這兩件事絕對沒有意義!

if (File.Exists(sourceFile)) { 
    System.IO.File.Copy(sourceFile, targetPath, true); 
} else { 
    XDocument doc = new XDocument(
     new XDeclaration("1.0", "utf-8", "yes"), 
     new XComment("This is a test"), 
     new XElement("root") 
    ); 
    doc.Save(targetPath); 
} 

如果你想保存XDocument這應該是足夠的,沒有文件需要提前創建。

doc.Save(targetPath); 

MSDN上的說明說

XDocument.Save(String) 

               序列化此的XDocument到文件,覆蓋現有文件,如果存在的話。

所有節點都必須被嵌入在單個根節點(任何名稱都行)和至少根節點必須存在

<?xml version="1.0" encoding="utf-8" ?> 
<html> 
    <head /> 
    <body /> 
</html> 

WRONG(兩個根節點)

<?xml version="1.0" encoding="utf-8" ?> 
<head /> 
<body /> 

WRONG(無根節點)

<?xml version="1.0" encoding="utf-8" ?> 

而且,我看不出有什麼String.Format是良好的,沒有額外的參數。我也不喜歡if (File.Exists(targetPath) == false)。更好:if (!File.Exists(targetPath))。更好的情況下,爲了有一個積極的問題,改變條件

if (File.Exists(targetPath)) { 
    System.IO.File.Copy(sourceFile, targetPath, true); 
} else { 
    File.Create(targetPath); 
    System.IO.File.Copy(sourceFile, targetPath, true); 
} 
+0

感謝您的全部輸入。非常感激。 –