2015-09-05 109 views
2

我得到一個XML響應作爲HTTPresponse,這效果很好。現在我試圖將它保存到光盤以備將來使用。我試圖使用How do I save a stream to a file in C#?中描述的第二種方法(沒有得到第一種方法工作)。該文件已創建,但爲空保存一個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); 
    } 
} 

回答

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,而不是試圖重讀網絡流數據,將工作。

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

讓我們不要忘記沖洗...並把座位放下! – nocturns2