En C#.NET quiero obtener los datos de una URL y guardarlo en un archivo en formato binario.

El uso de HttpWebRequest/Streamreader para leer una cadena, y el ahorro de uso de StreamWriter funciona bien con ASCII, pero los caracteres no ASCII se destrozados debido a que los Sistemas que piensa que no tiene que preocuparse acerca de la Codificación, codificación Unicode o de o lo que sea.

¿Cuál es la forma más sencilla de OBTENER los datos de una URL y guardarlo en un archivo binario, como es?

//This code works, but for ASCII only
String url = "url...";
HttpWebRequest  request  = (HttpWebRequest)
WebRequest.Create(url);

//execute the request
HttpWebResponse response = (HttpWebResponse)
request.GetResponse();

//we will read data via the response stream
Stream ReceiveStream = response.GetResponseStream();
StreamReader readStream = new StreamReader( ReceiveStream );
string contents = readStream.ReadToEnd();

string filename = @"...";

//create a writer and open the file
TextWriter tw = new StreamWriter(filename);
tw.Write(contents.Substring(5));
tw.Close();
InformationsquelleAutor jms | 2009-06-14

3 Comentarios

  1. 55

    Minimalista respuesta:

    using (WebClient client = new WebClient()) {
        client.DownloadFile(url, filePath);
    }

    O en PowerShell (sugerido en un anónimo editar):

    [System.Net.WebClient]::WebClient
    $client = New-Object System.Net.WebClient
    $client.DownloadFile($URL, $Filename)
    • Perfecto justo lo que necesitaba gracias!
    • Sería bueno si se puede descargar, en formato gzip archivos?
    • No es justo.
    • Impresionante! Muchas gracias.
    • no es esta línea redundante?: [Sistema.Net.WebClient]::WebClient
    • muy posiblemente, yo no soy un powershell buff, y como he señalado: que sugirió a través de un anónimo editar
    • Sí, [System.Net.WebClient]::WebClient es redundante. No romper nada, pero no es necesario.

  2. 14

    No use StreamReader o TextWriter. Guardar en un archivo con una prima de FileStream.

    String url = ...;
    HttpWebRequest  request  = (HttpWebRequest) WebRequest.Create(url);
    
    //execute the request
    HttpWebResponse response = (HttpWebResponse) request.GetResponse();
    
    //we will read data via the response stream
    Stream ReceiveStream = response.GetResponseStream();
    
    string filename = ...;
    
    byte[] buffer = new byte[1024];
    FileStream outFile = new FileStream(filename, FileMode.Create);
    
    int bytesRead;
    while((bytesRead = ReceiveStream.Read(buffer, 0, buffer.Length)) != 0)
        outFile.Write(buffer, 0, bytesRead);
    
    //Or using statement instead
    outFile.Close()
    • No olvides usar outFile.Close().
    • Gracias, @Rios, añadir (o mejor aún using).
  3. 0

    Esto es lo que yo uso:

    sUrl = "http://your.com/xml.file.xml";
    rssReader = new XmlTextReader(sUrl.ToString());
    rssDoc = new XmlDocument();
    
    WebRequest wrGETURL;
    wrGETURL = WebRequest.Create(sUrl);
    
    Stream objStream;
    objStream = wrGETURL.GetResponse().GetResponseStream();
    StreamReader objReader = new StreamReader(objStream, Encoding.UTF8);
    WebResponse wr = wrGETURL.GetResponse();
    Stream receiveStream = wr.GetResponseStream();
    StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8);
    string content = reader.ReadToEnd();
    XmlDocument content2 = new XmlDocument();
    
    content2.LoadXml(content);
    content2.Save("direct.xml");

Dejar respuesta

Please enter your comment!
Please enter your name here