将HTTP流保存​​到c#中的文件

时间:2015-09-05 13:48:43

标签: c# asp.net

我将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);
    }
}

2 个答案:

答案 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的数据,而不是尝试重新读取网络流。