2017-02-20 13 views
0

私は社内アプリケーション用の構成XMLを管理する小さなクラスを作成しています。"Path to Deniedへのアクセスを拒否する" XDocument.Save()の2回目の反復

次のコードは、新しいtのリストがロードされるたびに呼び出され、新しいtのデータをシリアル化しようとします。

私は何か基本的なものが欠けていますが、私はどこにいるのか分かりません。

例外は、特定の行が 'doc.Save( "TaskData.xml")' で、このコード

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"); 
} 

によってスローされます。

最初の繰り返しで、これはうまく動作し、コードはテンプレートファイルを作成します。

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 []'だったなら、それはそれを使用していないでしょう。 –

関連する問題