2010-10-04 17 views
6

Necesito descargar un archivo de texto de Internet usando C#. El tamaño del archivo puede ser bastante grande y la información que necesito siempre está dentro de los primeros 1000 bytes. es posible?Descargar los primeros 1000 bytes

+3

¿Es posible? Descargar archivos de texto? Aprenda a hacer preguntas: http://tinyurl.com/so-hints – Oded

+0

+ 1 Esa debería ser la página oficial de Preguntas frecuentes. – Marko

+4

@Oded: ¿Qué crees que falta en la pregunta? –

Respuesta

12

Robo de 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); 
     } 

    } 
} 

(Editado conforme a lo solicitado en los comentarios ...;))

+3

Sugiero reemplazar el 'ReadToEnd' con una lectura de (como máximo) 1000 caracteres en caso de que el servidor ignore la solicitud de rango. – Richard

+1

@Richard: Eso no sería necesario ya que se agregó un encabezado de rango a la solicitud. La respuesta será como máximo 1000 caracteres. –

+7

@Jeff: como decía mi comentario "en caso de que el servidor ignore la solicitud de rango" ya que el encabezado 'Rango' es * opcional * para el servidor y se puede ignorar. – Richard

2

que hice esto como una respuesta a su pregunta más reciente. También puede poner el encabezado de rango si lo desea, pero lo excluí.

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

Técnicamente, esto puede obtener hasta 2000 bytes si el StreamReader "piensa" que vuelve a ser unicode. Mi edición (ver arriba) por otro lado obliga a la codificación, que también puede estar mal. Rama necesita aclarar el requisito, supongo. – Lucero

Cuestiones relacionadas