ftp下载与http下载的区别

在尝试通过FTP协议下载文件时,开发者发现无法像HTTP那样直接获取到TotalBytesToReceive,ProgressPercentage始终保持0。经过研究,了解到FTP协议需要通过单独的请求先获取文件的ContentLength。代码示例展示了如何在DownloadProgressChanged事件中计算进度并更新UI。
摘要由CSDN通过智能技术生成

之前使用下载也都没管中间过程,最近有时间就研究了一下,FTP在获取文件大小时发现在调用e.TotalBytesToReceive时一直是-1,,而e.ProgressPercentage一直是0..只在最后一瞬间变化

看了许多文章也没找到解决方法,后面在一个问题的评论区看到有人说ftp是不像http那样返回的,要提前自己获取.我也不太明白

这是我目前测试提前读取文件大小最合适的位置

 void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            FtpWebRequest FTPWbReq = WebRequest.Create(url) as FtpWebRequest;
            FTPWbReq.Method = WebRequestMethods.Ftp.GetFileSize;

            FtpWebResponse FTPWebRes = FTPWbReq.GetResponse() as FtpWebResponse;
            length = FTPWebRes.ContentLength;
            FTPWebRes.Close();
            this.BeginInvoke((MethodInvoker)delegate {
               

                double bytesIn = double.Parse(e.BytesReceived.ToString());
                double totalBytes = length;//double.Parse(e.TotalBytesToReceive.ToString());
                double percentage = bytesIn / totalBytes * 100;
                label2.Text = "Downloaded" + e.BytesReceived + " of" + totalBytes;// e.TotalBytesToReceive;
                progressBar1.Value =int.Parse(Math.Truncate(percentage).ToString());
                this.label1.Text = "正在下载...";
                label3.Text = percentage.ToString()+"%";
            });

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值