C#控制台进度栏

时间:2019-05-07 14:10:08

标签: c# console progress

您好,因此从FTP下载文件时,我需要在C#控制台应用程序中具有进度条,但是对我来说有点困难,所以我使用已经完成的API和库。

我正在使用FluentFTP:https://github.com/robinrodricks/FluentFTP#faq_progress 进度条控制台功能来自:https://gist.github.com/co89757/5ae15bf61a62f82f9abd32a285f0c76a

我做了这样的事情:


        //Download files from FTP, return true or false if succed
        public static void DownloadFileFromFTP(string ip, string RemoteFilePath, string LocalFilePath, string username, string password)
        {

             FtpClient client = new FtpClient(ip);
             client.Credentials = new NetworkCredential(username, password);
             client.Connect();

            using (var progress = new ProgressBar())
            {

                   client.DownloadFile(LocalFilePath, RemoteFilePath, FtpLocalExists.Overwrite, FluentFTP.FtpVerify.Retry, progress);

            }

        }

所有功能均按预期工作。问题出在进度条上,它很快就变成了100%,但我没有像文件的5%那样下载,进度条却显示了100%。

我写错了任何文档吗?有人可以帮忙解决问题吗?

谢谢

约翰

1 个答案:

答案 0 :(得分:0)

您正在做的是在for循环中迭代100次,然后下载确切的次数。您需要做的是创建一个进度条,将minimun设置为0,将maximun设置为100。然后您需要定义一个回调函数,该回调函数会在每次调用进度时对其进行更新(根据文档,此过程由提供的函数完成)< / p>

为简短起见,您需要添加以下内容(从链接的文档中复制)

您的方法应如下所示

        //Download files from FTP, return true or false if succed
    public static void DownloadFileFromFTP(string ip, string RemoteFilePath, string LocalFilePath, string username, string password)
    {
         ProgressBar progressBar = new ProgressBar();

         Progress<double> progress = new Progress<double>(x => {
           if (x > 0)
           {
             progressBar.Report((double) x / 100);
           }   
         });
         FtpClient client = new FtpClient(ip);
         client.Credentials = new NetworkCredential(username, password);
         client.Connect();
         progressBar = new ProgressBar();
         client.DownloadFile(LocalFilePath, RemoteFilePath, FtpLocalExists.Overwrite, FluentFTP.FtpVerify.Retry, progress);
         progressBar.Dispose();
    }