1

我正在从 Internet 下载一个 xml 文件并将其保存在隔离存储中。如果我尝试阅读它,我会收到一个错误:

根级别的数据无效。第 1 行,位置 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);

这是我得到错误的地方......

我没有下载相同的文件并将其保存到隔离存储中没有问题......所以一定有问题。

4

1 回答 1

8

这:

writer.WriteLine(e.Result);

不做你认为它做的事。它只是调用ToString()a Stream,并将结果写入文件。

我建议您避免StreamWriter完全使用 a,而只需从直接复制e.ResultIsolatedStorageFileStream

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

哪里CopyStream将是一种仅复制数据的方法,例如

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);
    }
}
于 2012-05-21T18:51:27.173 回答