2010-10-04 33 views
6

Devo scaricare un file di testo da Internet utilizzando C#. La dimensione del file può essere abbastanza grande e le informazioni di cui ho bisogno sono sempre entro i primi 1000 byte. È possibile?Download dei primi 1000 byte

+3

È _che possibile? Download di file di testo? Scopri come fare domande - http://tinyurl.com/so-hints – Oded

+0

+ 1 Questa dovrebbe essere la pagina delle FAQ ufficiali. – Marko

+4

@Oded: cosa pensi che manchi della domanda? –

risposta

12

Rubato da 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); 
     } 

    } 
} 

(A cura come richiesto nei commenti ...;))

+3

Suggerirei di sostituire 'ReadToEnd' con una lettura di (al massimo) 1000 caratteri nel caso in cui il server abbia ignorato la richiesta di intervallo. – Richard

+1

@Richard: non sarebbe necessario poiché è stata aggiunta un'intestazione di intervallo alla richiesta. La risposta sarà al massimo 1000 caratteri. –

+7

@Jeff: come il mio commento diceva "nel caso in cui il server abbia ignorato la richiesta di intervallo" poiché l'intestazione 'Range' è * opzionale * per il server e può essere ignorata. – Richard

2

ho fatto questo come una risposta alla tua domanda più recente. Puoi anche inserire l'intestazione dell'intervallo se vuoi, ma l'ho escluso.

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

Tecnicamente questo può richiedere fino a 2000 byte se lo StreamReader "pensa" che ritorni unicode. La mia modifica (vedi sopra), invece, impone la codifica, che potrebbe anche essere sbagliata. Rama deve chiarire il requisito che indovino. – Lucero

Problemi correlati