2017-02-20 4 views
0

사내 응용 프로그램 용 구성 XML을 관리하는 작은 클래스를 작성 중입니다."Path to Denied"액세스를 반환하는 XDocument.Save()의 두 번째 반복

다음 코드는 t의 새 목록이로드 될 때마다 호출되며 새 t에 대한 데이터를 serialize하거나 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는 사용 권한 예외를 throw합니다.

도움을 주시면 대단히 감사하겠습니다.

답변

0

유용한 파일을 확인하지 않으므로 첫 번째 반복 작업에 놀랐습니다. 복수 인수를 사용하여 Path.Combine을 호출하는 대신 TaskData.xml을 현재 디렉토리와 연결합니다. 당신이 원하는 : 틀림없이 Path.Combine에 대한 오버로드가 모두 최소 2 처음 비 PARAM 배열 매개 변수를 요구해야한다

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

그것은 유감 와우 ...

+0

... 현재 코드도 컴파일합니다입니다 , 나는 그것을 잡지 않았다는 것을 믿을 수 없다 ... 나는 문제를 경감시키기 위해 이전 버전에서 복사하고 붙여 넣었다고 믿는다. 또한 호출되는 오버로드는 실제로 Path.Combine (String []) 시그니처입니다. 컴파일러가 단일 문자열을 인수로 사용하여 암시 적으로 캐스팅합니다. 나는 배열 매개 변수를 취하는 메서드를 인스턴스화 한 것이 바로 그 상황을 거부했다는 것을 맹세 할 수 있었다. – SurelyTheresABetterWay

+0

@SurelyTheresABetterWay :'params string []'입니다. 괜찮습니다. 그냥'string [] '이라면 그것을 사용하지 않았을 것입니다. –