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;
;
byte[] btArray = new byte[bufferSize];
, btArray.Length);
)
{
downloadedByte += contentSize;
/ totalByte);
System.Console.WriteLine("percent=" + percent + "%");
writeStream.Write(btArray, , contentSize);
contentSize = readStream.Read(btArray, , 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
C# Ftp方式下载文件(无用户认证方式,支持断点续传)的更多相关文章
- C#- FTP递归下载文件
c# ftp递归下载文件,找来找去这个最好.(打断点,一小处foreach要改成for) /// <summary> /// ftp文件上传.下载操作类 /// </summary& ...
- 通过cmd命令到ftp上下载文件
通过cmd命令到ftp上下载文件 点击"开始"菜单.然后输入"cmd"点"enter"键,出现cmd命令执行框 2 输入"ftp& ...
- Python之FTP多线程下载文件之分块多线程文件合并
Python之FTP多线程下载文件之分块多线程文件合并 欢迎大家阅读Python之FTP多线程下载系列之二:Python之FTP多线程下载文件之分块多线程文件合并,本系列的第一篇:Python之FTP ...
- Python之FTP多线程下载文件之多线程分块下载文件
Python之FTP多线程下载文件之多线程分块下载文件 Python中的ftplib模块用于对FTP的相关操作,常见的如下载,上传等.使用python从FTP下载较大的文件时,往往比较耗时,如何提高从 ...
- 【FTP】C# System.Net.FtpClient库连接ftp服务器(下载文件)
如果自己单枪匹马写一个连接ftp服务器代码那是相当恐怖的(socket通信),有一个评价较高的dll库可以供我们使用. 那就是System.Net.FtpClient,链接地址:https://net ...
- (4)FTP服务器下载文件
上一篇中,我们提到了怎么从FTP服务器下载文件.现在来具体讲述一下. 首先是路径配置.. 所以此处我们需要一个app.config来设置路径. <?xml version="1.0&q ...
- linux FTP 批量下载文件
wget是一个从网络上自动下载文件的自由工具,支持通过HTTP.HTTPS.FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理.wget名称的由来是“World Wide Web”与“ge ...
- 呵呵哒,LNMP下通过fread方式下载文件时,中文名称文件找不到文件
哎,整整折腾一个下午. 本来好好的,thinkphp 自动的uniq方式保存的文件名,非要使用原文件名,真心蛋疼~~ 然后就只好写个脚本 把原来的所有文件都重新命名一下 - - 然后把数据库对应字段也 ...
- ajax方式下载文件
在web项目中需要下载文件,由于传递的参数比较多(通过参数在服务器端动态下载指定文件),所以希望使用post方式传递参数.通常,在web前端需要下载文件,都是通过指定<a>标签的href属 ...
随机推荐
- SDOJ 2605 闲荡
描述 L 饭后无聊,便在 BugTown 里闲荡. BugTown 共有 N 栋房屋和 M 条有向道路.每栋房屋都有一个非负整数 vi 作为标识. BugTown 有一个特性十分神奇:从任意一个房屋离 ...
- X86保护模式 八操作系统类指令
X86保护模式 八操作系统类指令 通常在操作系统代码中使用,应用程序中不应用这些指令 指令分为三种:实模式指令,任何权级下使用的指令.实模式权级0下可执行的指令和仅在保护模式下执行的指令 一 实模 ...
- tzcacm去年训练的好题的AC代码及题解
A - Tree UVA - 548 You are to determine the value of the leaf node in a given binary tree that is th ...
- 基于 K8S 构建数据中心操作系统
在 12 月 22 日 ECUG 的下午场 ,七牛云容器计算部技术总监袁晓沛为大家带来了主题为<基于 K8S 的 DCOS 之路>的精彩分享,向大家介绍了七牛容器云目前 K8S 的状况和产 ...
- 【Luogu】P2219修筑绿化带(单调队列)
题目链接 这题各种边界判断恶心死人 就是单调队列在每行求出最小的.能装进A*B方块里的花坛 然后再在刚刚求出的那个东西里面跑一遍竖着的单调队列 然后……边界调了一小时 做完这题我深刻地感觉到我又强了 ...
- Redis 复制功能的几个重要方面
Redis 复制功能的几个重要方面:1. 一个Master可以有多个Slave:2. Redis使用异步复制.从2.8开始,Slave会周期性(每秒一次)发起一个Ack确认复制流(replicatio ...
- BZOJ1297 [SCOI2009]迷路 【矩阵优化dp】
题目 windy在有向图中迷路了. 该有向图有 N 个节点,windy从节点 0 出发,他必须恰好在 T 时刻到达节点 N-1. 现在给出该有向图,你能告诉windy总共有多少种不同的路径吗? 注意: ...
- java 自定义log类
目录机构如下: package tpf.common; import org.apache.log4j.*; import java.io.File; import java.net.URL; pub ...
- 需要打印真实尺寸大小等需求的,css的单位可以使用mm等做单位
今天甲方那边改需求了,要求打印出来的尺寸是85mm/55mm的,开始还一直在网上找px和mm的相关换算,结果去w3c看了,竟然还有mm单位的, 在这里做个笔记
- d3 画简单的柱形图
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...