Estoy intentando descargar un archivo de un servidor FTP con una barra de progreso.Descargar archivo de FTP con progreso - TotalBytesToReceive es siempre -1?
El archivo se está descargando, y el evento ProgressChanged llama, excepto en el caso de que args TotalBytesToReceive siempre sea -1. TotalBytes aumenta, pero no puedo calcular el porcentaje sin el total.
Me imagino que podría encontrar el tamaño del archivo a través de otros comandos ftp, pero me pregunto por qué no funciona.
Mi código:
FTPClient request = new FTPClient();
request.Credentials = credentials;
request.DownloadProgressChanged += new DownloadProgressChangedEventHandler(request_DownloadProgressChanged);
//request.DownloadDataCompleted += new DownloadDataCompletedEventHandler(request_DownloadDataCompleted);
request.DownloadDataAsync(new Uri(folder + file));
while (request.IsBusy) ;
....
static void request_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
if (e.TotalBytesToReceive == -1)
{
l.reportProgress(-1, FormatBytes(e.BytesReceived) + " out of ?");
}
else
{
l.reportProgress(e.ProgressPercentage, "Downloaded " + FormatBytes(e.BytesReceived) + " out of " + FormatBytes(e.TotalBytesToReceive) + " (" + e.ProgressPercentage + "%)");
}
}
....
class FTPClient : WebClient
{
protected override WebRequest GetWebRequest(System.Uri address)
{
FtpWebRequest req = (FtpWebRequest)base.GetWebRequest(address);
req.UsePassive = false;
return req;
}
}
Gracias.
Parece que tendrá que proporcionar una mejor aplicación de las 'WebClient' para manejar eso. Busque propiedades/métodos interesantes para anular. – leppie
Eché un vistazo a 'WebClient', pero parece casi imposible de implementar sin muchos hacks. – leppie