c#通过ftp下载文件,借用了两位大神的代码 
http://www.cnblogs.com/rond/archive/2012/07/30/2611295.html

http://blog.csdn.net/csethcrm/article/details/8139744

感谢 
在这做下记录

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;//ftp类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Threading;using FtpSyn;namespace FtpSyn
{public class FtpHelper{//基本设置static private string path = @"ftp://" + "192.168.1.103" + "/";    //目标路径static private string ftpip = "192.168.1.103";    //ftp IP地址static private string username = "root";   //ftp用户名static private string password = "";   //ftp密码//获取ftp上面的文件和文件夹public static string[] GetFileList(string dir){string[] downloadFiles;StringBuilder result = new StringBuilder();FtpWebRequest request;try{request = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));request.UseBinary = true;request.Credentials = new NetworkCredential(username, password);//设置用户名和密码request.Method = WebRequestMethods.Ftp.ListDirectory;request.UseBinary = true;WebResponse response = request.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream());string line = reader.ReadLine();while (line != null){result.Append(line);result.Append("\n");Console.WriteLine(line);line = reader.ReadLine();}// to remove the trailing '\n'result.Remove(result.ToString().LastIndexOf('\n'), 1);reader.Close();response.Close();return result.ToString().Split('\n');}catch (Exception ex){Console.WriteLine("获取ftp上面的文件和文件夹:" + ex.Message);downloadFiles = null;return downloadFiles;}}/// <summary>/// 获取文件大小/// </summary>/// <param name="file">ip服务器下的相对路径</param>/// <returns>文件大小</returns>public static int GetFileSize(string file){StringBuilder result = new StringBuilder();FtpWebRequest request;try{request = (FtpWebRequest)FtpWebRequest.Create(new Uri(path + file));request.UseBinary = true;request.Credentials = new NetworkCredential(username, password);//设置用户名和密码request.Method = WebRequestMethods.Ftp.GetFileSize;int dataLength = (int)request.GetResponse().ContentLength;return dataLength;}catch (Exception ex){Console.WriteLine("获取文件大小出错:" + ex.Message);return -1;}}/// <summary>/// 文件上传/// </summary>/// <param name="filePath">原路径(绝对路径)包括文件名</param>/// <param name="objPath">目标文件夹:服务器下的相对路径 不填为根目录</param>public static void FileUpLoad(string filePath, string objPath = ""){try{string url = path;if (objPath != "")url += objPath + "/";try{FtpWebRequest reqFTP = null;//待上传的文件 (全路径)try{FileInfo fileInfo = new FileInfo(filePath);using (FileStream fs = fileInfo.OpenRead()){long length = fs.Length;reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url + fileInfo.Name));//设置连接到FTP的帐号密码reqFTP.Credentials = new NetworkCredential(username, password);//设置请求完成后是否保持连接reqFTP.KeepAlive = false;//指定执行命令reqFTP.Method = WebRequestMethods.Ftp.UploadFile;//指定数据传输类型reqFTP.UseBinary = true;using (Stream stream = reqFTP.GetRequestStream()){//设置缓冲大小int BufferLength = 5120;byte[] b = new byte[BufferLength];int i;while ((i = fs.Read(b, 0, BufferLength)) > 0){stream.Write(b, 0, i);}Console.WriteLine("上传文件成功");}}}catch (Exception ex){Console.WriteLine("上传文件失败错误为" + ex.Message);}finally{}}catch (Exception ex){Console.WriteLine("上传文件失败错误为" + ex.Message);}finally{}}catch (Exception ex){Console.WriteLine("上传文件失败错误为" + ex.Message);}}/// <summary>/// 删除文件/// </summary>/// <param name="fileName">服务器下的相对路径 包括文件名</param>public static void DeleteFileName(string fileName){try{FileInfo fileInf = new FileInfo(ftpip + "" + fileName);string uri = path + fileName;FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));// 指定数据传输类型reqFTP.UseBinary = true;// ftp用户名和密码reqFTP.Credentials = new NetworkCredential(username, password);// 默认为true,连接不会被关闭// 在一个命令之后被执行reqFTP.KeepAlive = false;// 指定执行什么命令reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();response.Close();}catch (Exception ex){Console.WriteLine("删除文件出错:" + ex.Message);}}/// <summary>/// 新建目录 上一级必须先存在/// </summary>/// <param name="dirName">服务器下的相对路径</param>public static void MakeDir(string dirName){try{string uri = path + dirName;FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));// 指定数据传输类型reqFTP.UseBinary = true;// ftp用户名和密码reqFTP.Credentials = new NetworkCredential(username, password);reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();response.Close();}catch (Exception ex){Console.WriteLine("创建目录出错:" + ex.Message);}}/// <summary>/// 删除目录 上一级必须先存在/// </summary>/// <param name="dirName">服务器下的相对路径</param>public static void DelDir(string dirName){try{string uri = path + dirName;FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));// ftp用户名和密码reqFTP.Credentials = new NetworkCredential(username, password);reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();response.Close();}catch (Exception ex){Console.WriteLine("删除目录出错:" + ex.Message);}}/// <summary>/// 从ftp服务器上获得文件夹列表/// </summary>/// <param name="RequedstPath">服务器下的相对路径</param>/// <returns></returns>public static List<string> GetDirctory(string RequedstPath){List<string> strs = new List<string>();try{string uri = path + RequedstPath;   //目标路径 path为服务器地址FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));// ftp用户名和密码reqFTP.Credentials = new NetworkCredential(username, password);reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;WebResponse response = reqFTP.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名string line = reader.ReadLine();while (line != null){if (line.Contains("<DIR>")){string msg = line.Substring(line.LastIndexOf("<DIR>") + 5).Trim();strs.Add(msg);}line = reader.ReadLine();}reader.Close();response.Close();return strs;}catch (Exception ex){Console.WriteLine("获取目录出错:" + ex.Message);}return strs;}/// <summary>/// 从ftp服务器上获得文件列表/// </summary>/// <param name="RequedstPath">服务器下的相对路径</param>/// <returns></returns>public static List<string> GetFile(string RequedstPath){List<string> strs = new List<string>();try{string uri = path + RequedstPath;   //目标路径 path为服务器地址FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));// ftp用户名和密码reqFTP.Credentials = new NetworkCredential(username, password);reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;WebResponse response = reqFTP.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名string line = reader.ReadLine();while (line != null){if (!line.Contains("<DIR>")){string msg = line.Substring(39).Trim();strs.Add(msg);}line = reader.ReadLine();}reader.Close();response.Close();return strs;}catch (Exception ex){Console.WriteLine("获取文件出错:" + ex.Message);}return strs;}//从ftp服务器上下载文件的功能  public void Download( string fileName){FtpWebRequest reqFTP;try{string filePath = Application.StartupPath;FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path + fileName));reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;reqFTP.UseBinary = true;reqFTP.Credentials = new NetworkCredential(username, password);reqFTP.UsePassive = false;FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();Stream ftpStream = response.GetResponseStream();long cl = response.ContentLength;int bufferSize = 2048;int readCount;byte[] buffer = new byte[bufferSize];readCount = ftpStream.Read(buffer, 0, bufferSize);while (readCount > 0){outputStream.Write(buffer, 0, readCount);readCount = ftpStream.Read(buffer, 0, bufferSize);}ftpStream.Close();outputStream.Close();response.Close();}catch (Exception ex){throw ex;}}  }
}namespace WindowsFormsApplication1
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){FtpHelper m_ftp=new FtpHelper();string[] list = FtpHelper.GetFileList("/");m_ftp.Download("monitor_config.xml");}}
}

c#通过ftp下载文件相关推荐

  1. C#FTP下载文件出现远程服务器返回错误: (500) 语法错误,无法识别命令

    如果下载多个文件的时候,有时候莫名其妙的出现500服务器错误,很有可能是没有设置KeepAlive 属性导致的. 出现应用程序未处理的异常:2015/1/6 11:40:56 异常类型:WebExce ...

  2. 使用FTP下载文件connect.retrieveFileStream(filename) 获取不到InputStream流,返回null的问题

    使用同事的代码做FTP下载文件,InputStream in = connect.retrieveFileStream(fileName);执行这句时InputStream总是获取为空 后来把代码改成 ...

  3. Java实现FTP下载文件到客户端(浏览器)

    目录 一.简介 二.maven依赖 三.配置类 四.工具类 4.1.服务器文件名中文处理 4.2.下载文件名中文处理 五.接口验证 一.简介   我在之前的文章(Java实现文件上传和下载)里讲过非F ...

  4. 【踩坑】Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题

    [踩坑]Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题 一. 问题重现 二. 问题解决思路 1. 确认是不是上传就导致数据出错了 2. 是不是平台问题 三. ...

  5. 从ftp下载文件(word)到本地显示文件损坏或错误

    今天遇到问题从ftp下载文件到本地路径无法查看,发现是文件名称中含有比如空格,问号等非常规字符存在,虽然在本地创建了对应的文件,但是流无法识别一些非常规字符,所以即使下载到本地也显示文件损坏或错误.我 ...

  6. 使用FTP下载文件资源

    使用FTP下载文件(新手向) 1.FTP介绍 FTP是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文件传输协议".用于Internet上的 ...

  7. linux中如何用ftp命令下载文件,linux中ftp下载文件命令的用法

    linxu下的ftp命令是用来下载文件或者上传文件的,下面由学习啦小编为大家整理了linux的ftp下载文件命令的用法的相关知识,希望对大家有帮助! 一.linux中的ftp下载文件命令的用法 从远程 ...

  8. Java 实现上传文件到FTP和从FTP下载文件

    在eclipse 中创建项目,并将commons-net-3.6.jar包复制到项目中 commons-net-3.6.jar:链接:https://pan.baidu.com/s/1iz0862TX ...

  9. python从ftp下载文件时问题解决

    python从ftp下载文件代码如下 import os from ftplib import FTP def ftp_connect(host, username, password):     f ...

最新文章

  1. 对于这些机器学习算法 数学不好你还真看不懂
  2. java string document_java - String 和 document 的相互转换总结
  3. 软件构建设计图_游戏设计如何帮助您构建更好的软件
  4. Spring : Spring AOP源码解析
  5. php背景色如何填充满,php - 按一定百分比覆盖背景颜色
  6. 正则表达式验证手机号,正则表达式验证邮箱号,正则表达式验证QQ号,正则表达式验证微信号等
  7. mysql workbench修改密码_更改MySQL用户密码
  8. C# System.DirectoryServices.DirectoryEntry 域用户验证
  9. 金蝶BOS 插件数据填充
  10. 服务器故障与主板维修,服务器主板故障
  11. VMWare SCSI硬盘识别
  12. springboot结合注解动态获取数据库表
  13. mysql条件删除表中某些行数据_根据MySQL中的条件仅删除表中的某些行
  14. Arduino基础入门二之呼吸灯
  15. 改进YOLOv7系列:首发结合最新Transformer视觉模型MOAT结构:交替移动卷积和注意力带来强大的Transformer视觉模型,超强的提升
  16. 拦截导弹 导弹防御系统
  17. -1-6 java 异常简单介绍 java异常 异常体系 Throwable 分类 throws和throw 异常处理 自定义异常...
  18. 37所国家示范性软件学院
  19. 安卓 camera API2 下发Reuqest的接口流程
  20. linux3.5 usb键盘,CRUX 3.5发布下载,一款轻量级且为i686优化的Linux发行版

热门文章

  1. 系统上电复位后GPIO默认输出电平对系统的影响
  2. 推荐 :数据科学家应该避免的5种统计陷阱
  3. 从浏览器地址栏输入url到请求返回发生了什么(深问)
  4. android 边距 百分比,Android百分比布局:PercentRelativeLayout
  5. eclipse选择java版本_Eclipse 版本选择
  6. swagger excel下载提示打不开
  7. 【刷leetcode,拿Offer-009】561. Array Partition I(贪心,C++)
  8. 映射IP使模拟器可以通信
  9. 单片机protues仿真,按键复位不起作用
  10. 集成学习之 如何进行多样性增强