public class FtpHelper{string ftpServerIP;string ftpRemotePath;string ftpUserID;string ftpPassword;string ftpURI;/// <summary>/// 连接FTP/// </summary>/// <param name="FtpServerIP">FTP连接地址</param>/// <param name="FtpRemotePath">指定FTP连接成功后的当前目录, 如果不指定即默认为根目录</param>/// <param name="FtpUserID">用户名</param>/// <param name="FtpPassword">密码</param>public FtpHelper(string FtpServerIP, string FtpRemotePath, string FtpUserID, string FtpPassword){ftpServerIP = FtpServerIP;ftpRemotePath = FtpRemotePath;ftpUserID = FtpUserID;ftpPassword = FtpPassword;ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";}/// <summary>/// 上传/// </summary>/// <param name="filename"></param>public void Upload(string filename){FileInfo fileInf = new FileInfo(filename);string uri = ftpURI + fileInf.Name;FtpWebRequest reqFTP;reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);reqFTP.KeepAlive = false;reqFTP.Method = WebRequestMethods.Ftp.UploadFile;reqFTP.UseBinary = true;reqFTP.UsePassive = false;reqFTP.ContentLength = fileInf.Length;int buffLength = 2048;byte[] buff = new byte[buffLength];int contentLen;FileStream fs = fileInf.OpenRead();try{Stream strm = reqFTP.GetRequestStream();contentLen = fs.Read(buff, 0, buffLength);while (contentLen != 0){strm.Write(buff, 0, contentLen);contentLen = fs.Read(buff, 0, buffLength);}strm.Close();fs.Close();}catch (Exception ex){throw new Exception("Ftphelper Upload Error --> " + ex.Message);}}/// <summary>/// 下载/// </summary>/// <param name="filePath"></param>/// <param name="fileName"></param>public void Download(string filePath, string fileName){FtpWebRequest reqFTP;try{FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileName));reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;reqFTP.UseBinary = true;reqFTP.UsePassive = false;reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);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 new Exception("FtpHelper Download Error --> " + ex.Message);}}/// <summary>/// 删除文件/// </summary>/// <param name="fileName"></param>public void Delete(string fileName){try{string uri = ftpURI + fileName;FtpWebRequest reqFTP;reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);reqFTP.KeepAlive = false;reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;reqFTP.UsePassive = false;string result = String.Empty;FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();long size = response.ContentLength;Stream datastream = response.GetResponseStream();StreamReader sr = new StreamReader(datastream);result = sr.ReadToEnd();sr.Close();datastream.Close();response.Close();}catch (Exception ex){throw new Exception("FtpHelper Delete Error --> " + ex.Message + "  文件名:" + fileName);}}/// <summary>/// 删除文件夹/// </summary>/// <param name="folderName"></param>public void RemoveDirectory(string folderName){try{string uri = ftpURI + folderName;FtpWebRequest reqFTP;reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);reqFTP.KeepAlive = false;reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;reqFTP.UsePassive = false;string result = String.Empty;FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();long size = response.ContentLength;Stream datastream = response.GetResponseStream();StreamReader sr = new StreamReader(datastream);result = sr.ReadToEnd();sr.Close();datastream.Close();response.Close();}catch (Exception ex){throw new Exception("FtpHelper Delete Error --> " + ex.Message + "  文件名:" + folderName);}}/// <summary>/// 获取当前目录下明细(包含文件和文件夹)/// </summary>/// <returns></returns>public string[] GetFilesDetailList(){string[] downloadFiles;try{StringBuilder result = new StringBuilder();FtpWebRequest ftp;ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));ftp.Credentials = new NetworkCredential(ftpUserID, ftpPassword);ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;ftp.UsePassive = false;WebResponse response = ftp.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);//while (reader.Read() > 0)//{//}string line = reader.ReadLine();//line = reader.ReadLine();//line = reader.ReadLine();while (line != null){result.Append(line);result.Append("\n");line = reader.ReadLine();}result.Remove(result.ToString().LastIndexOf("\n"), 1);reader.Close();response.Close();return result.ToString().Split('\n');}catch (Exception ex){downloadFiles = null;throw new Exception("FtpHelper  Error --> " + ex.Message);}}/// <summary>/// 获取当前目录下文件列表(仅文件)/// </summary>/// <returns></returns>public string[] GetFileList(string mask){string[] downloadFiles;StringBuilder result = new StringBuilder();FtpWebRequest reqFTP;try{reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));reqFTP.UseBinary = true;reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;reqFTP.UsePassive = false;WebResponse response = reqFTP.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);string line = reader.ReadLine();while (line != null){if (mask.Trim() != string.Empty && mask.Trim() != "*.*"){string mask_ = mask.Substring(0, mask.IndexOf("*"));if (line.Substring(0, mask_.Length) == mask_){result.Append(line);result.Append("\n");}}else{result.Append(line);result.Append("\n");}line = reader.ReadLine();}result.Remove(result.ToString().LastIndexOf('\n'), 1);reader.Close();response.Close();return result.ToString().Split('\n');}catch (Exception ex){downloadFiles = null;if (ex.Message.Trim() != "远程服务器返回错误: (550) 文件不可用(例如,未找到文件,无法访问文件)。"){throw new Exception("FtpHelper GetFileList Error --> " + ex.Message.ToString());}return downloadFiles;}}/// <summary>/// 获取当前目录下所有的文件夹列表(仅文件夹)/// </summary>/// <returns></returns>public string[] GetDirectoryList(){string[] drectory = GetFilesDetailList();string m = string.Empty;foreach (string str in drectory){int dirPos = str.IndexOf("<DIR>");if (dirPos > 0){/*判断 Windows 风格*/m += str.Substring(dirPos + 5).Trim() + "\n";}else if (str.Trim().Substring(0, 1).ToUpper() == "D"){/*判断 Unix 风格*/string dir = str.Substring(54).Trim();if (dir != "." && dir != ".."){m += dir + "\n";}}}char[] n = new char[] { '\n' };return m.Split(n);}/// <summary>/// 判断当前目录下指定的子目录是否存在/// </summary>/// <param name="RemoteDirectoryName">指定的目录名</param>public bool DirectoryExist(string RemoteDirectoryName){string[] dirList = GetDirectoryList();foreach (string str in dirList){if (str.Trim() == RemoteDirectoryName.Trim()){return true;}}return false;}/// <summary>/// 判断当前目录下指定的文件是否存在/// </summary>/// <param name="RemoteFileName">远程文件名</param>public bool FileExist(string RemoteFileName){string[] fileList = GetFileList("*.*");foreach (string str in fileList){if (str.Trim() == RemoteFileName.Trim()){return true;}}return false;}/// <summary>/// 创建文件夹/// </summary>/// <param name="dirName"></param>public void MakeDir(string dirName){FtpWebRequest reqFTP;try{// dirName = name of the directory to create.reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + dirName));reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;reqFTP.UseBinary = true;reqFTP.UsePassive = false;reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();Stream ftpStream = response.GetResponseStream();ftpStream.Close();response.Close();}catch (Exception ex){throw new Exception("FtpHelper MakeDir Error --> " + ex.Message);}}/// <summary>/// 获取指定文件大小/// </summary>/// <param name="filename"></param>/// <returns></returns>public long GetFileSize(string filename){FtpWebRequest reqFTP;long fileSize = 0;try{reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + filename));reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;reqFTP.UseBinary = true;reqFTP.UsePassive = false;reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();Stream ftpStream = response.GetResponseStream();fileSize = response.ContentLength;ftpStream.Close();response.Close();}catch (Exception ex){throw new Exception("FtpHelper GetFileSize Error --> " + ex.Message);}return fileSize;}/// <summary>/// 改名/// </summary>/// <param name="currentFilename"></param>/// <param name="newFilename"></param>public void ReName(string currentFilename, string newFilename){FtpWebRequest reqFTP;try{reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + currentFilename));reqFTP.Method = WebRequestMethods.Ftp.Rename;reqFTP.RenameTo = newFilename;reqFTP.UseBinary = true;reqFTP.UsePassive = false;reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();Stream ftpStream = response.GetResponseStream();ftpStream.Close();response.Close();}catch (Exception ex){throw new Exception("FtpHelper ReName Error --> " + ex.Message);}}/// <summary>/// 移动文件/// </summary>/// <param name="currentFilename"></param>/// <param name="newFilename"></param>public void MovieFile(string currentFilename, string newDirectory){ReName(currentFilename, newDirectory);}/// <summary>/// 切换当前目录/// </summary>/// <param name="DirectoryName"></param>/// <param name="IsRoot">true 绝对路径   false 相对路径</param>public void GotoDirectory(string DirectoryName, bool IsRoot){if (IsRoot){ftpRemotePath = DirectoryName;}else{ftpRemotePath += DirectoryName + "/";}ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";}/// <summary>/// 删除订单目录/// </summary>/// <param name="ftpServerIP">FTP 主机地址</param>/// <param name="folderToDelete">FTP 用户名</param>/// <param name="ftpUserID">FTP 用户名</param>/// <param name="ftpPassword">FTP 密码</param>public static void DeleteOrderDirectory(string ftpServerIP, string folderToDelete, string ftpUserID, string ftpPassword){try{if (!string.IsNullOrEmpty(ftpServerIP) && !string.IsNullOrEmpty(folderToDelete) && !string.IsNullOrEmpty(ftpUserID) && !string.IsNullOrEmpty(ftpPassword)){FtpHelper fw = new FtpHelper(ftpServerIP, folderToDelete, ftpUserID, ftpPassword);//进入订单目录fw.GotoDirectory(folderToDelete, true);//获取规格目录string[] folders = fw.GetDirectoryList();foreach (string folder in folders){if (!string.IsNullOrEmpty(folder) || folder != ""){//进入订单目录string subFolder = folderToDelete + "/" + folder;fw.GotoDirectory(subFolder, true);//获取文件列表string[] files = fw.GetFileList("*.*");if (files != null){//删除文件foreach (string file in files){fw.Delete(file);}}//删除冲印规格文件夹fw.GotoDirectory(folderToDelete, true);fw.RemoveDirectory(folder);}}//删除订单文件夹string parentFolder = folderToDelete.Remove(folderToDelete.LastIndexOf('/'));string orderFolder = folderToDelete.Substring(folderToDelete.LastIndexOf('/') + 1);fw.GotoDirectory(parentFolder, true);fw.RemoveDirectory(orderFolder);}else{throw new Exception("FTP 及路径不能为空!");}}catch (Exception ex){throw new Exception("删除订单时发生错误,错误信息为:" + ex.Message);}}}

转载于:https://www.cnblogs.com/liang-ling/p/5778710.html

C# FTP 上传、下载、获取文件列表相关推荐

  1. 使用.net FtpWebRequest 实现FTP常用功能 上传 下载 获取文件列表 移动 切换目录 改名 ....

    平时根本没时间搞FTP什么的,现在这个项目需要搞FTP,为什么呢,我给大家说下项目背景,我们的一个应用程序上需要上传图片,但是用户部署程序的服务器上不让上传任何东西,给了我们一个FTP账号和密码,让我 ...

  2. C# 文件操作(上传 下载 删除 文件列表...)

    using System.IO;      1.文件上传   ----------   如下要点:   HTML部分:   <form id="form1" runat=&q ...

  3. ftp上传-下载文件通用工具类,已实测

    话不多说直接上代码 package com.springboot.demo.utils;import lombok.extern.slf4j.Slf4j; import org.apache.comm ...

  4. linux curl 命令 http请求、下载文件、ftp上传下载

    1. curl 命令简介 cURL(CommandLine Uniform Resource Locator),是一个利用 URL 语法,在命令行终端下使用的网络请求工具,支持 HTTP.HTTPS. ...

  5. ACTIVEX实现大文件FTP上传下载---上

    ACTIVEX实现大文件FTP上传 在Windows 操作系统下,有一个重要的机制,就是OLE ,就是可以让某个应用程序(OLE Controller)访问其它应用程序(OLE Server)所提供的 ...

  6. python get 下载 目录_python实现支持目录FTP上传下载文件的方法

    本文实例讲述了python实现支持目录FTP上传下载文件的方法.分享给大家供大家参考.具体如下: 该程序支持ftp上传下载文件和目录.适用于windows和linux平台. #!/usr/bin/en ...

  7. linux ftp上传下载文件,Linux下ftp命令上传下载文件

    命令行下连接ftp服务器 方式一: 默认端口 ftp hostname 方式二: 指定端口 [ec2-user@ip-99-240-80-144 ~]$ ftp ftp> open 99.240 ...

  8. python上传本地文件到ftp_python实现的简单FTP上传下载文件实例

    本文实例讲述了python实现的简单FTP上传下载文件的方法.分享给大家供大家参考.具体如下: python本身自带一个FTP模块,可以实现上传下载的函数功能. #!/usr/bin/env pyth ...

  9. java ftp上传文件_jaVA使用FTP上传下载文件的问题

    为了实现 FTP上传下载,大概试了两个方法 sun.net.ftp.FtpClient org.apache.commons.net 一开始使用sun.net.ftp.FtpClient,结果发现唯一 ...

  10. android ftp同步程序,ftp同步 安卓,安卓手机ftp上传下载文件功能同步视频照片

    手机拍照越来方便,手机里的照片也越积越多,手机运行缓慢,本文利用安卓的每步FTP服务APP来自动实现手机视频照片的同步,释放手机被占用的存储空间.在机顶盒上运行每步FTP服务,机顶盒USB口连接U盘做 ...

最新文章

  1. Asp.net支持的最大上传文件大小
  2. java使用jeids实现redis2.6的String操作(1)
  3. 聊聊webflux参数校验
  4. Kylin的cube模型
  5. manjaro双系统 windows_Win10和Manjaro双系统安装记录
  6. noip2014生活大爆炸版石头剪刀布
  7. asp.net电子商务开发实战 视频 第二讲 (下)
  8. Visual Studio 起始页中不显示最近使用的项目的解决办法
  9. Java并发编程:4种线程池和缓冲队列BlockingQueue
  10. C语言格式化读写文件
  11. 吴恩达神经网络和深度学习-学习笔记-31-池化层
  12. thinkphp LoginAction.class.php 登录模块
  13. Unity+Android GET和POST方式的简单实现API请求(人像动漫化)
  14. 大功率MOS管选型手册及可申请样品-KIA MOS管
  15. 教孩子学编程python 代码_天津哪有教孩子学编程python
  16. xampp 登陆MySQL 访问被拒绝
  17. 2006(首届)Web2.0十大创新品牌
  18. java 自定义语言 解析_视频讲解 Java 语言基础编程题(自定义异常类,IO 流)
  19. teambition/tower/team@osc/worktile团队协作工具价格比较
  20. GwcNet:逐组相关的立体匹配网络(CVPR 2019)

热门文章

  1. mysql存储过程中怎么睡几秒_MySql的逻辑架构
  2. window.addeventlistener 不能调用方法_Java入门第十四课:如何定义”方法“
  3. Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素-un
  4. Spring Boot实践——基础和常用配置
  5. 移动端开发的知识系统介绍
  6. avalon框架,简单的MVVM
  7. magento -- 修改文件来手动控制编译的开启和关闭
  8. 浅析Java与C#的事件处理机制(转)
  9. 是先设计mysql表再进行php代码_PHP与RBAC设计思路,数据表设计与源码讲解
  10. Tomcat设置URL兼容特殊符号