2010-10-04 32 views
6

我需要使用C#从互联网下载文本文件。文件大小可能相当大,我需要的信息总是在前1000个字节内。这可能吗?下载前1000字节

+3

是_what_可能吗?正在下载文本文件?学习如何提问 - http://tinyurl.com/so-hints – Oded 2010-10-04 07:56:46

+0

+ 1这应该是官方常见问题页面。 – Marko 2010-10-04 07:59:57

+4

@Oded:您认为这个问题缺少什么? – 2010-10-04 08:01:10

回答

12

here盗窃。

string GetWebPageContent(string url) 
{ 
    string result = string.Empty; 
    HttpWebRequest request; 
    const int bytesToGet = 1000; 
    request = WebRequest.Create(url) as HttpWebRequest; 

    //get first 1000 bytes 
    request.AddRange(0, bytesToGet - 1); 

    // the following code is alternative, you may implement the function after your needs 
    using (WebResponse response = request.GetResponse()) 
    { 
     using (Stream stream = response.GetResponseStream()) 
     { 
      byte[] buffer = new byte[1024]; 
      int read = stream.Read(buffer, 0, 1000); 
      Array.Resize(ref buffer, read); 
      return Encoding.ASCII.GetString(buffer); 
     } 

    } 
} 

(编辑为在评论...要求;))

+3

我建议在服务器忽略范围请求的情况下,用(最多)1000个字符的读取替换ReadToEnd。 – Richard 2010-10-04 08:00:52

+1

@Richard:由于范围标题被添加到请求中,所以不需要。响应最多为1000个字符。 – 2010-10-04 08:06:11

+7

@Jeff:正如我的评论所说的“如果服务器忽略了范围请求”,因为服务器的'Range'头是*可选的,并且可以忽略。 – Richard 2010-10-04 08:09:28

2

我这样做是为解答您的问题更新。如果你愿意,你也可以把范围标题放在里面,但是我排除了它。

string GetWebPageContent(string url) 
    { 
     //string result = string.Empty; 
     HttpWebRequest request; 
     const int bytesToGet = 1000; 
     request = WebRequest.Create(url) as HttpWebRequest; 
     var buffer = new char[bytesToGet]; 
     using (WebResponse response = request.GetResponse()) 
     { 
      using (StreamReader sr = new StreamReader(response.GetResponseStream())) 
      { 
       sr.Read(buffer, 0, bytesToGet); 
      } 
     } 
     return new string(buffer); 
    } 
+0

从技术上讲,如果StreamReader“认为”它返回unicode,这可能会高达2000字节。另一方面,我的编辑(见上)强制编码,这也可能是错误的。 Rama需要澄清我想的要求。 – Lucero 2010-10-05 22:12:26