2013-06-04 2 views
0

내가 지금처럼 내 문서를로드 해요 : 완료 읽기에 그런저장하여 XDocument 문제

WebClient client = new WebClient(); 
     client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted); 
     client.OpenReadAsync(new Uri("Rolls.xml", UriKind.Relative)); 

:

XDocument doc = XDocument.Load(XmlReader.Create(e.Result)); 

     using (Stream stream = e.Result) 
     { 
      { 
       foreach (var roll in _rollsToAddStudentTo) 
       { 
        doc.Element("rolls").Add(new XElement("rollid", roll)); 
       } 
       doc.Save(stream); 
      } 

     } 

가 나는 오류가 저장에 도달 할 때 문제가

"지정된 방법이 지원되지 않습니다."

대단히 감사하겠습니다. 건배

감사 Jehof, 그래서

, 어떻게 그 비동기 방식으로 내 문서를 통합 할 것인가?

foreach (var roll in _rollsToAddStudentTo) 
       { 
        doc.Element("rolls").Add(new XElement("rollid", roll)); 
       } 

       WebClient client = new WebClient(); 
       client.OpenWriteCompleted += new OpenWriteCompletedEventHandler(client_OpenWriteCompleted); 
       client.OpenWriteAsync(new Uri("Rolls.xml", UriKind.Relative)); 

아래에서 논리를 변경하여 해결했습니다.

using (IsolatedStorageFile isoStore = 
      IsolatedStorageFile.GetUserStoreForApplication()) 
      { 
       // Create new file 
       using (IsolatedStorageFileStream isoStream = 
        new IsolatedStorageFileStream("Rolls.xml", 
         FileMode.Create, isoStore)) 
       { 
        // Write to the Isolated Storage for the user. 
        XmlWriterSettings settings = new XmlWriterSettings(); 
        settings.Indent = true; 
        // Create an XmlWriter. 
        using (XmlWriter writer = XmlWriter.Create(isoStream, settings)) 
        { 
         writer.WriteStartDocument(); 
         writer.WriteStartElement("Rolls"); 

         foreach (var roll in _rollsToAddStudentTo) 
         { 
          writer.WriteStartElement("roll"); 
          writer.WriteAttributeString("rollid", roll); 
          writer.WriteEndElement(); 
         } 

         writer.WriteEndElement(); 
         writer.WriteEndDocument(); 
        } 
       } 
      } 

답변

0

XDocument를 저장하려고하는 스트림은 readonly입니다. 왜냐하면 이벤트 OpenReadCompleted에 등록 된 메서드 client_OpenReadCompleted에 인수로 전달 된 스트림이기 때문입니다.

WebClient를 통해 XDocument를 다시 저장하려면 OpenWriteAsync -method 중 하나를 호출해야합니다.