C# Ftp方式下载文件(无用户认证方式,支持断点续传)
类代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; namespace ConsoleTest { class FtpDlder { public void download(String url, String localFile) { FtpWebRequest remoteFileLenReq; // 此请求是为了获取远程文件长度 FtpWebRequest remoteFileReadReq;// 此请求是为了读取文件 Stream readStream = null; // 读取流 FileStream writeStream = null; // 写本地文件流 try { writeStream = new FileStream(localFile, FileMode.Append); long startPosition=writeStream.Length;// 读出本地文件已有长度 // 下面代码目的是取远程文件长度 remoteFileLenReq = (FtpWebRequest)FtpWebRequest.Create(url); remoteFileLenReq.UseBinary = true; remoteFileLenReq.ContentOffset = 0; remoteFileLenReq.Method = WebRequestMethods.Ftp.GetFileSize; FtpWebResponse rsp = (FtpWebResponse)remoteFileLenReq.GetResponse(); long totalByte = rsp.ContentLength; rsp.Close(); if (startPosition >= totalByte) { System.Console.WriteLine("本地文件长度" + startPosition + "已经大于等于远程文件长度" + totalByte); writeStream.Close(); return; } // 初始化读取远程文件请求 remoteFileReadReq = (FtpWebRequest)FtpWebRequest.Create(url); remoteFileReadReq.UseBinary = true; remoteFileReadReq.KeepAlive = false; remoteFileReadReq.ContentOffset = startPosition; remoteFileReadReq.Method = WebRequestMethods.Ftp.DownloadFile; FtpWebResponse response = (FtpWebResponse)remoteFileReadReq.GetResponse(); readStream = response.GetResponseStream(); long downloadedByte = startPosition; int bufferSize = 512; byte[] btArray = new byte[bufferSize]; int contentSize = readStream.Read(btArray, 0, btArray.Length); while (contentSize > 0) { downloadedByte += contentSize; int percent = (int)(downloadedByte * 100 / totalByte); System.Console.WriteLine("percent=" + percent + "%"); writeStream.Write(btArray, 0, contentSize); contentSize = readStream.Read(btArray, 0, btArray.Length); } readStream.Close(); writeStream.Close(); response.Close(); return; } catch (Exception) { return; } finally { if (readStream != null) { readStream.Close(); } if (writeStream != null) { writeStream.Close(); } } } } }
使用示例:
static void Main(string[] args) { // Ftp下载测试,无用户身份测试 FtpDlder fd = new FtpDlder(); fd.download("ftp://192.168.0.109/jump.jpg", "c:\\asd\\jump.jpg"); }
以上代码参考了 http://blog.csdn.net/jiankunking/article/details/50017009 的代码,在此向原作者表示感谢。
2017年6月28日16:07:53
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)