我有一个代码从网站上检索XML文件,所以我这样做:
WebRequest request = WebRequest.Create(url);
request.Method = "GET";
request.ContentType = "text/xml";
using (WebResponse webResponse = request.GetResponse())
{
using (Stream responseStream = webResponse.GetResponseStream())
{
if (responseStream != null)
{
reportXML = XDocument.Load(responseStream.ToString());
}
}
using (XmlWriter writer = XmlWriter.Create(@"C:\Retrieved.xml"))
{
reportXML.Save(writer);
}
}
Run Code Online (Sandbox Code Playgroud)
但我调试了应用程序,似乎我失去了这行代码的所有内容,所以我没有任何东西可以保存.
Stream responseStream = webResponse.GetResponseStream())
Run Code Online (Sandbox Code Playgroud)
知道为什么会这样吗?
如果我调查对象,我会看到:
Length ='responseStream.Length'引发类型'System.NotSupportedException'的异常
错误如下:
找不到文件'C:\ Documents and Settings\user\My Documents\Visual Studio 2010\Projects\Proto\App\bin\Debug\System.Net.ConnectStream'.
这就是问题:
reportXML = XDocument.Load(responseStream.ToString());
Run Code Online (Sandbox Code Playgroud)
调用ToString()这样的流几乎不会给你任何有用的东西.如果您只想加载流的内容,请删除ToString调用:
reportXML = XDocument.Load(responseStream);
Run Code Online (Sandbox Code Playgroud)
或者,如果您真的只想将其保存到磁盘,那么首先只需使用Stream.CopyTo并且不要将其解析为XML.