2017-02-20 37 views
0

我在寫一個小類來管理內部應用程序的配置XML。第二次迭代XDocument.Save()拋出「訪問被拒絕路徑」

每次載入一個新的t列表時,都會調用以下代碼,並嘗試序列化新t的數據,或者在t已存在的情況下載入數據。

我錯過了一些基本的東西,但我不確定在哪裏。

的異常是由該代碼

if (!File.Exists(Path.Combine(Environment.CurrentDirectory + "TaskData.xml"))) 
{ 
    XDocument doc = new XDocument(); 
    XElement rootElement = new XElement("ConfigData", 
           new XElement("Servers"), 
           new XElement("Paths")); 
    doc.Add(rootElement); 
    doc.Save("TaskData.xml"); 
} 

具體線是 'doc.Save( 「TaskData.xml」)' 拋出。

第一次迭代,這工作正常,代碼創建模板文件。

在第二次迭代中,即使當xml文件位於目錄中時,File.Exists返回'false',並且doc.Save拋出權限異常。

任何幫助,非常感謝。

回答

0

我很驚訝它的工作在第一次迭代 - 因爲你沒有檢查一個有用的文件。不要使用多個參數調用Path.Combine,而是將TaskData.xml與當前目錄連接起來。你想:

if (!File.Exists(Path.Combine(Environment.CurrentDirectory, "TaskData.xml"))) 

這是一個遺憾的是,當前的代碼編譯,甚至可以說是...爲Path.Combine重載應至少2 需要非PARAM陣列參數首先有...

+0

哇,我不敢相信我沒有注意到......我相信我爲了緩解這個問題而複製並粘貼了以前的版本。 另外,被調用的重載實際上是Path.Combine(String [])簽名,我很驚訝編譯器將單個字符串作爲參數,並且會隱式地將其轉換。我可以發誓我見過使用數組參數的方法的實例會拒絕這種情況。 – SurelyTheresABetterWay

+0

@SurelyTheresABetterWay:這是一個'params string []' - 這很好。如果它只是'string []'它不會使用它。 –