C# 将HTTP流保存到c中的文件#
我得到一个XML响应作为一个HTTPresponse,效果很好。现在我正试图把它保存到光盘上,以备将来使用。我正在尝试使用中描述的第二种方法(第一种方法也不起作用)。文件已创建,但为空C# 将HTTP流保存到c中的文件#,c#,asp.net,C#,Asp.net,我得到一个XML响应作为一个HTTPresponse,效果很好。现在我正试图把它保存到光盘上,以备将来使用。我正在尝试使用中描述的第二种方法(第一种方法也不起作用)。文件已创建,但为空 Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); XmlDocument events = new XmlDocument(); events.Load(re
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
XmlDocument events = new XmlDocument();
events.Load(reader);
var fileStream = File.Create("C:\\XMLfiles\\test.xml");
CopyStream(dataStream, fileStream);
fileStream.Close();
public static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[8 * 1024];
int len;
while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, len);
}
}
这是一个棘手的局面。问题是您已经阅读了
HttpResponseStream
。因此,您处于流的末尾。在正常情况下,您只需设置dataStream.Position=0
。然而,你不能在这里这样做,因为我们不是在谈论你电脑上的文件,它是一个网络流,所以你不能“倒退”(它已经发送给你)。因此,我建议您不要再次尝试编写原始流,而是编写XmlDocument
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
XmlDocument events = new XmlDocument();
events.Load(reader);
events.Save("C:\\XMLfiles\\test.xml");
在这种情况下,它将起作用,因为您正在保存复制到
XmlDocument
的数据,而不是尝试重新读取网络流。请使用以下代码段。不要忘记“使用”方法
HttpWebRequest tt = HttpWebRequest.CreateHttp("http://www.stackoverflow.com");
using (var yy = tt.GetResponse())
using (var stream = yy.GetResponseStream())
using (var file = File.Open(@"c:\response.html", FileMode.Create))
{
stream.CopyTo(file);
stream.Flush();
}
别忘了冲水。。。把座位放下!