2012-05-21 3 views
1

인터넷에서 xml 파일을 다운로드하고 격리 된 저장소에 저장합니다.루트 수준의 데이터가 잘못되었습니다. 줄 1, 위치 1

Data at the root level is invalid. Line 1, position 1.

string tempUrl = "http://xxxxx.myfile.xml"; // changed 
WebClient client = new WebClient(); 
client.OpenReadAsync(new Uri(tempUrl)); 
client.OpenReadCompleted += new OpenReadCompletedEventHandler(delegate(object sender, OpenReadCompletedEventArgs e) { 

StreamWriter writer = new StreamWriter(new IsolatedStorageFileStream("myfile.xml", FileMode.Create, FileAccess.Write, myIsolatedStorage)); 
writer.WriteLine(e.Result); 
writer.Close(); 
}); 

이것은을 다운로드하는 방법과 파일을 저장 ...

그리고 나는 그렇게 읽어보십시오 : 나는 그것을 읽으려고하면 오류가 발생합니다

IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile("myfile.xml", FileMode.Open, FileAccess.Read); 
XDocument xmlDoc = XDocument.Load(fileStream); 

이것은 오류가 발생하는 곳입니다 ...

동일한 파일을 다운로드하지 않고 격리 된 st로 저장해도 문제가 없습니다. orage ... 그래서 잘못이 있어야합니다.

+0

콘텐츠의 모양은 무엇을 의미합니까? 일반적인 XML 파일입니다. 다운로드 및 격리 된 저장소에 저장하지 않고 동일한 파일을 읽는 데 아무런 문제가 없습니다 ... 따라서 오류가 있어야합니다. –

+0

파일 *의 내용을 보았습니다. 나는 강력하게 * 전형적인 XML 파일이 아닐 것이라고 생각합니다. –

답변

8

이 :

writer.WriteLine(e.Result); 

당신이 그것을하지 생각하지 않습니다. Stream에서 ToString()을 호출하고 그 결과를 파일에 씁니다.

는 당신이 완전히 StreamWriter를 사용하지 제안, 단순히 바로 IsolatedStorageFileStreame.Result 복사 : CopyStream이 방법을 것

using (var output = new IsolatedStorageFileStream("myfile.xml", FileMode.Create, 
            FileAccess.Write, myIsolatedStorage)) 
{ 
    CopyStream(e.Result, output); 
} 

그냥 데이터를 복사하기 위해, 예를 들어,

public static void CopyStream(Stream input, Stream output) 
{ 
    byte[] buffer = new byte[8 * 1024]; 
    int read; 
    while((read = input.Read (buffer, 0, buffer.Length)) > 0) 
    { 
     output.Write (buffer, 0, read); 
    } 
} 
+0

친절하게 저를 교육 해 주셔서 감사합니다. 파일의 내용이 예상 한 xml 내용 대신 "MS.Internal.InternalMemoryStream"이라는 사실도 알게되었습니다. 격리 된 저장소를 확인하기 위해 별도의 플러그인을 설치해야만했습니다. 그래서 시간이 걸렸습니다. 귀하의 제안은 완벽하게 작동합니다! –

관련 문제