2015-04-26 83 views
0

如何在此代碼中將流輸出附加到字符串而不是文件?流到字符串

HttpWebResponse res = (HttpWebResponse)httpRequest.GetResponse(); 

using (Stream output = File.OpenWrite(@"c:\temp\tmp.html"))     
using (Stream input = res.GetResponseStream()) 
{ 
    byte[] buffer = new byte[8192]; 
    int bytesRead; 
    while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0) 
    { 
     output.Write(buffer, 0, bytesRead); 
    } 
    input.Close(); 
    output.Close(); 
} 

回答

1

您可以使用StreamReader

HttpWebResponse res = (HttpWebResponse)httpRequest.GetResponse(); 

using (Stream input = res.GetResponseStream()) 
using (var streamReader = new StreamReader(input)) 
{ 
    string result = streamReader.ReadToEnd(); 
} 

注意這將讀取整個string到內存中。

+0

OK,工作。謝謝!之後我應該使用Dispose()來清除Streamreader,對吧? – Rado

+0

@Rado是的,你應該。但是我的回答已經將它封裝在'using'語句中,它將爲您調用Dispose。 –

+0

哦,是的,我現在記得。感謝提醒... – Rado

0

使用編碼獲取一個字符串,然後使用StringReader讀取緩衝區。

  HttpWebResponse res = (HttpWebResponse)httpRequest.GetResponse(); 
 

 
      using (Stream output = File.OpenWrite(@"c:\temp\tmp.html")) 
 
      using (Stream input = res.GetResponseStream()) 
 
      { 
 
       byte[] buffer = new byte[8192]; 
 
       int bytesRead; 
 
       while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0) 
 
       { 
 
        output.Write(buffer, 0, bytesRead); 
 
       } 
 
       input.Close(); 
 
       output.Close(); 
 

 
       string sBuffer = Encoding.UTF8.GetString(buffer); 
 
       StringReader reader = new StringReader(sBuffer); 
 
​

+0

好的,這比第一個例子好嗎?原始代碼不使用編碼,並且可以用於目的(數據抓取)。 – Rado