我将XML响应作为HTTP响应获得,效果很好。现在我试图将它保存到光盘以供将来使用。我试图使用How do I save a stream to a file in 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);
}
}
答案 0 :(得分:2)
请使用以下代码段。别忘了"使用"接近!
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();
}
答案 1 :(得分:0)
这是一个棘手的情况。问题是你已经阅读了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
的数据,而不是尝试重新读取网络流。