Ich versuche, eine Datei von einem FTP-Server mit einer Fortschrittsanzeige herunterzuladen.Datei von FTP mit Progress herunterladen - TotalBytesToReceive ist immer -1?
Die Datei wird heruntergeladen, und das Ereignis Progress anruft, außer im Falle args TotalBytesToReceive ist immer -1. TotalBytes erhöht, aber ich kann den Prozentsatz ohne die Summe nicht berechnen.
Ich stelle mir vor, ich könnte die Dateigröße durch andere FTP-Befehle finden, aber ich frage mich, warum das nicht funktioniert?
Mein Code:
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;
}
}
Dank. tun dies auf eigene Faust
Es scheint Ihnen eine bessere Umsetzung zu bieten haben 'WebClient', um damit umzugehen. Suchen Sie nach interessanten Eigenschaften/Methoden zum Überschreiben. – leppie
Hatte einen Blick auf 'WebClient', aber es scheint nahezu unmöglich, ohne viele Hacks zu implementieren. – leppie