在c#中保存HTTP流到文件
本文关键字:文件 HTTP 保存 | 更新日期: 2023-09-27 18:11:14
我得到一个xml响应作为HTTPresponse,这工作得很好。现在我试着把它保存到光盘上以备将来使用。我试图使用第二种方法描述我如何在c#中保存流到文件?(第一种方法也没有起作用)。文件已创建,但为空
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);
}
}
请使用以下代码片段。不要忘记"使用"方法!
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();
}
这是一个棘手的情况。问题是你已经读过HttpResponseStream
了。结果,你就到了流的末端。一般情况下,你只需要设置dataStream.Position = 0
。然而,你不能在这里这样做,因为我们不是在谈论你PC上的文件,它是一个网络流,所以你不能"后退"(它已经发送给你了)。因此,我建议你做的是,而不是试图再次写原始流,写你的XmlDocument
。
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
XmlDocument events = new XmlDocument();
events.Load(reader);
events.Save("C:''XMLfiles''test.xml");
在这种情况下,它将工作,因为您正在保存已复制到XmlDocument
的数据,而不是试图重新读取网络流。