Загрузить файл с FTP с прогрессом - TotalBytesToReceive всегда -1?

Я пытаюсь загрузить файл с FTP-сервера с индикатором выполнения.

Файл загружается, и вызывается событие ProgressChanged, за исключением случая, когда аргумент TotalBytesToReceive всегда равен -1. TotalBytes увеличивается, но я не могу вычислить процент без общего значения.

Я полагаю, что могу найти размер файла с помощью других команд ftp, но мне интересно, почему это не работает?

Мой код:

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;
    }
}

Спасибо.

7
задан Mitch 4 January 2011 в 06:01
поделиться