您好,因此从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%。
我写错了任何文档吗?有人可以帮忙解决问题吗?
谢谢
约翰
答案 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();
}