Skip to main content
 首页 » 编程设计

c#之保存 webrequest 返回的流对象

2024年02月02日29lonelyxmas

我有一段代码可以从站点检索 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); 
    } 
 } 

但是我调试了应用程序,似乎我失去了这行代码中的所有内容,所以我没有什么可以保存的了。

Stream responseStream = webResponse.GetResponseStream()) 

知道为什么会这样吗?

如果我调查这个对象,我会看到这个:

Length = 'responseStream.Length' threw an exception of type 'System.NotSupportedException'

错误如下:

Could not find file 'C:\Documents and Settings\user\My Documents\Visual Studio 2010\Projects\Proto\App\bin\Debug\System.Net.ConnectStream'.

请您参考如下方法:

问题是:

reportXML = XDocument.Load(responseStream.ToString()); 

像这样在流上调用 ToString() 几乎永远不会给您任何有用的东西。如果您只想加载流的内容,请去掉 ToString 调用:

reportXML = XDocument.Load(responseStream); 

或者,如果您真的只想将它保存到磁盘,只需使用Stream.CopyTo即可。并且首先不要费心将其解析为 XML。