2014-06-23 2 views
0

저는이 문제에 대한 연구를 해왔지만 아직 해결하지 못했습니다. 나는이 기능이 있습니다Close XDocument 인스턴스

private void AddNewService() 
{ 
    string strPath = "ServicesToExecute.xml"; 
    string strServicename = tbNewService.Text; 
    //try 
    //{ 
     XDocument xdDocument; 
     using (XmlReader xmlReader = XmlReader.Create(strPath)) 
     { 
      xdDocument = XDocument.Load(xmlReader); 

      XElement root = new XElement("Service"); 
      root.Add(new XElement("Name", strServicename)); 
      xdDocument.Element("ServicesToExecute").Add(root); 
      xmlReader.Close(); 
      xdDocument.Save(strPath);  
     } 

을 그리고 ... 파일을 저장하기 위해 어떤 생각을하는 동안 오류가? 나는 내가 정말로 무언가를 놓치고 있다고 생각한다. 정말로 어리 석다. 그러나 지금은 그것을 볼 수 없다.

+0

어떤 예외 오류를 얻을 때 발생합니다? – Haney

+1

'XDocument.Load' 오버로드를 사용하지 말고 왜 'XmlReader'를 생성하고 직접 닫는 대신에 경로를 사용합니까? –

+0

예외는 "System.xml.dll에 System.IO.IOException 유형의 처리되지 않은 예외가 있습니다"다른 프로세스에서 사용 중이기 때문에 프로세스가 blablabla.xml 파일에 액세스 할 수 없습니다 ... – user3765774

답변

0

나는 당신이 AKA 당신이 읽기 위해 열려있는 파일을 덮어하려고 ... 같은 경로에서 XDocument을 저장하려고 다음 XmlReaderServicesToExecute.xml라는 이름의 파일을 열고있어 생각합니다. 당 당신은 아마과 같은 XDocument.Load(string path) 오버로드를 사용하여 코드를 단순화한다, 위의 @mikez :

private void AddNewService() 
{ 
    string strPath = "ServicesToExecute.xml"; 
    string strServicename = tbNewService.Text; 
    //try 
    //{ 
     XDocument xdDocument = XDocument.Load(strPath); 

     XElement root = new XElement("Service"); 
     root.Add(new XElement("Name", strServicename)); 
     xdDocument.Element("ServicesToExecute").Add(root); 

     // Save 
     xdDocument.Save(strPath); 
+0

죄송합니다 .. .. 사용하지 말고 save 문을 옮기지 말고 ... close ...를 움직여서는 안됩니다 ... 여전히 연구하고 시도하고 있습니다 .. – user3765774

+0

다른 경로/파일 이름으로 저장하거나' XmlReader' (내 업데이트 된 답변 참조). – Haney

+0

아니요 .. 죄송합니다. 동일한 답변 ... 한 번 작동하고 나중에는 동일하게 .. 그런데 .. 동일한 파일을 업데이트해야합니다 ... 내 서비스를 체크인하고 다시로드하는 한 콤보 박스 – user3765774