Si hallas algún error con tu código o trabajo, recuerda probar siempre en un ambiente de testing antes aplicar el código al trabajo final.
Solución:
Con la clase WebClient:
using System.Net;
//...
WebClient Client = new WebClient ();
Client.DownloadFile("http://i.stackoverflow.com/Content/Img/stackoverflow-logo-250.png", @"C:folderstackoverflowlogo.png");
Utilizar WebClient.DownloadFile
:
using (WebClient client = new WebClient())
client.DownloadFile("http://csharpindepth.com/Reviews.aspx",
@"c:UsersJonTestfoo.txt");
Es posible que necesite conocer el estado durante la descarga del archivo o usar las credenciales antes de realizar la solicitud.
Aquí hay un ejemplo que cubre estas opciones:
Uri ur = new Uri("http://remotehost.do/images/img.jpg");
using (WebClient client = new WebClient())
//client.Credentials = new NetworkCredential("username", "password");
String credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes("Username" + ":" + "MyNewPassword"));
client.Headers[HttpRequestHeader.Authorization] = $"Basic credentials";
client.DownloadProgressChanged += WebClientDownloadProgressChanged;
client.DownloadDataCompleted += WebClientDownloadCompleted;
client.DownloadFileAsync(ur, @"C:pathnewImage.jpg");
Y las funciones de devolución de llamada implementadas de la siguiente manera:
void WebClientDownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
Console.WriteLine("Download status: 0%.", e.ProgressPercentage);
// updating the UI
Dispatcher.Invoke(() =>
progressBar.Value = e.ProgressPercentage;
);
void WebClientDownloadCompleted(object sender, DownloadDataCompletedEventArgs e)
Console.WriteLine("Download finished!");
(Ver 2) – Notación lambda: otra opción posible para manejar los eventos
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(delegate(object sender, DownloadProgressChangedEventArgs e)
Console.WriteLine("Download status: 0%.", e.ProgressPercentage);
// updating the UI
Dispatcher.Invoke(() =>
progressBar.Value = e.ProgressPercentage;
);
);
client.DownloadDataCompleted += new DownloadDataCompletedEventHandler(delegate(object sender, DownloadDataCompletedEventArgs e)
Console.WriteLine("Download finished!");
);
(Ver 3) – Podemos hacerlo mejor
client.DownloadProgressChanged += (object sender, DownloadProgressChangedEventArgs e) =>
Console.WriteLine("Download status: 0%.", e.ProgressPercentage);
// updating the UI
Dispatcher.Invoke(() =>
progressBar.Value = e.ProgressPercentage;
);
;
client.DownloadDataCompleted += (object sender, DownloadDataCompletedEventArgs e) =>
Console.WriteLine("Download finished!");
;
(Ver 4) – O
client.DownloadProgressChanged += (o, e) =>
Console.WriteLine($"Download status: e.ProgressPercentage%.");
// updating the UI
Dispatcher.Invoke(() =>
progressBar.Value = e.ProgressPercentage;
);
;
client.DownloadDataCompleted += (o, e) =>
Console.WriteLine("Download finished!");
;
Si sostienes algún reparo o forma de aclararse nuestro noticia te mencionamos realizar una explicación y con placer lo estudiaremos.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)