在c#中将HTTP流保存到文件

问题描述 投票:0回答:2

我得到了一个 XML 响应作为 HTTP 响应,效果很好。现在我也尝试将其保存到光盘以供将来使用。我尝试使用如何将流保存到 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);
    }
}
c# asp.net
2个回答
3
投票

请使用以下代码片段。不要忘记“使用”方法!

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();
}

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

© www.soinside.com 2019 - 2024. All rights reserved.