C# FTP操作类可用
- public class FtpClient
- {
- #region 构造函数
- /// <summary>
- /// 创建FTP工具
- /// <para>
- /// 默认不使用SSL,使用二进制传输方式,使用被动模式
- /// </para>
- /// </summary>
- /// <param name="host">主机名称</param>
- /// <param name="userId">用户名</param>
- /// <param name="password">密码</param>
- public FtpClient(string host, string userId, string password)
- : this(host, userId, password, 21, null, false, true, true)
- {
- }
- /// <summary>
- /// 创建FTP工具
- /// </summary>
- /// <param name="host">主机名称</param>
- /// <param name="userId">用户名</param>
- /// <param name="password">密码</param>
- /// <param name="port">端口</param>
- /// <param name="enableSsl">允许Ssl</param>
- /// <param name="proxy">代理</param>
- /// <param name="useBinary">允许二进制</param>
- /// <param name="usePassive">允许被动模式</param>
- public FtpClient(string host, string userId, string password, int port, IWebProxy proxy, bool enableSsl, bool useBinary, bool usePassive)
- {
- this.userId = userId;
- this.password = password;
- if (host.ToLower().StartsWith("ftp://"))
- {
- this.host = host;
- }
- else
- {
- this.host = "ftp://" + host;
- }
- this.port = port;
- this.proxy = proxy;
- this.enableSsl = enableSsl;
- this.useBinary = useBinary;
- this.usePassive = usePassive;
- }
- #endregion
- #region 主机
- private string host = string.Empty;
- /// <summary>
- /// 主机
- /// </summary>
- public string Host
- {
- get
- {
- return this.host ?? string.Empty;
- }
- }
- #endregion
- #region 登录用户名
- private string userId = string.Empty;
- /// <summary>
- /// 登录用户名
- /// </summary>
- public string UserId
- {
- get
- {
- return this.userId;
- }
- }
- #endregion
- #region 密码
- private string password = string.Empty;
- /// <summary>
- /// 密码
- /// </summary>
- public string Password
- {
- get
- {
- return this.password;
- }
- }
- #endregion
- #region 代理
- IWebProxy proxy = null;
- /// <summary>
- /// 代理
- /// </summary>
- public IWebProxy Proxy
- {
- get
- {
- return this.proxy;
- }
- set
- {
- this.proxy = value;
- }
- }
- #endregion
- #region 端口
- private int port = 21;
- /// <summary>
- /// 端口
- /// </summary>
- public int Port
- {
- get
- {
- return port;
- }
- set
- {
- this.port = value;
- }
- }
- #endregion
- #region 设置是否允许Ssl
- private bool enableSsl = false;
- /// <summary>
- /// EnableSsl
- /// </summary>
- public bool EnableSsl
- {
- get
- {
- return enableSsl;
- }
- }
- #endregion
- #region 使用被动模式
- private bool usePassive = true;
- /// <summary>
- /// 被动模式
- /// </summary>
- public bool UsePassive
- {
- get
- {
- return usePassive;
- }
- set
- {
- this.usePassive = value;
- }
- }
- #endregion
- #region 二进制方式
- private bool useBinary = true;
- /// <summary>
- /// 二进制方式
- /// </summary>
- public bool UseBinary
- {
- get
- {
- return useBinary;
- }
- set
- {
- this.useBinary = value;
- }
- }
- #endregion
- #region 远端路径
- private string remotePath = "/";
- /// <summary>
- /// 远端路径
- /// <para>
- /// 返回FTP服务器上的当前路径(可以是 / 或 /a/../ 的形式)
- /// </para>
- /// </summary>
- public string RemotePath
- {
- get
- {
- return remotePath;
- }
- set
- {
- string result = "/";
- if (!string.IsNullOrEmpty(value) && value != "/")
- {
- result = "/" + value.TrimStart('/').TrimEnd('/') + "/";
- }
- this.remotePath = result;
- }
- }
- #endregion
- #region 创建一个FTP连接
- /// <summary>
- /// 创建一个FTP请求
- /// </summary>
- /// <param name="url">请求地址</param>
- /// <param name="method">请求方法</param>
- /// <returns>FTP请求</returns>
- private FtpWebRequest CreateRequest(string url, string method)
- {
- //建立连接
- FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url);
- request.Credentials = new NetworkCredential(this.userId, this.password);
- request.Proxy = this.proxy;
- request.KeepAlive = false;//命令执行完毕之后关闭连接
- request.UseBinary = useBinary;
- request.UsePassive = usePassive;
- request.EnableSsl = enableSsl;
- request.Method = method;
- return request;
- }
- #endregion
- #region 上传一个文件到远端路径下
- /// <summary>
- /// 把文件上传到FTP服务器的RemotePath下
- /// </summary>
- /// <param name="localFile">本地文件信息</param>
- /// <param name="remoteFileName">要保存到FTP文件服务器上的名称</param>
- public bool Upload(FileInfo localFile, string remoteFileName)
- {
- bool result = false;
- if (localFile.Exists)
- {
- string url = Host.TrimEnd('/') + RemotePath + remoteFileName;
- FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.UploadFile);
- //上传数据
- using (Stream rs = request.GetRequestStream())
- using (FileStream fs = localFile.OpenRead())
- {
- byte[] buffer = new byte[4096];//4K
- int count = fs.Read(buffer, 0, buffer.Length);
- while (count > 0)
- {
- rs.Write(buffer, 0, count);
- count = fs.Read(buffer, 0, buffer.Length);
- }
- fs.Close();
- result = true;
- }
- return result;
- }
- throw new Exception(string.Format("本地文件不存在,文件路径:{0}", localFile.FullName));
- }
- #endregion
- #region 从FTP服务器上下载文件
- /// <summary>
- /// 从当前目录下下载文件
- /// <para>
- /// 如果本地文件存在,则从本地文件结束的位置开始下载.
- /// </para>
- /// </summary>
- /// <param name="serverName">服务器上的文件名称</param>
- /// <param name="localName">本地文件名称</param>
- /// <returns>返回一个值,指示是否下载成功</returns>
- public bool Download(string serverName, string localName)
- {
- bool result = false;
- using (FileStream fs = new FileStream(localName, FileMode.OpenOrCreate)) //创建或打开本地文件
- {
- //建立连接
- string url = Host.TrimEnd('/') + RemotePath + serverName;
- FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.DownloadFile);
- request.ContentOffset = fs.Length;
- using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
- {
- fs.Position = fs.Length;
- byte[] buffer = new byte[4096];//4K
- int count = response.GetResponseStream().Read(buffer, 0, buffer.Length);
- while (count > 0)
- {
- fs.Write(buffer, 0, count);
- count = response.GetResponseStream().Read(buffer, 0, buffer.Length);
- }
- response.GetResponseStream().Close();
- }
- result = true;
- }
- return result;
- }
- #endregion
- #region 重命名FTP服务器上的文件
- /// <summary>
- /// 文件更名
- /// </summary>
- /// <param name="oldFileName">原文件名</param>
- /// <param name="newFileName">新文件名</param>
- /// <returns>返回一个值,指示更名是否成功</returns>
- public bool Rename(string oldFileName, string newFileName)
- {
- bool result = false;
- //建立连接
- string url = Host.TrimEnd('/') + RemotePath + oldFileName;
- FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.Rename);
- request.RenameTo = newFileName;
- using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
- {
- result = true;
- }
- return result;
- }
- #endregion
- #region 从当前目录下获取文件列表
- /// <summary>
- /// 获取当前目录下文件列表
- /// </summary>
- /// <returns></returns>
- public List<string> GetFileList()
- {
- List<string> result = new List<string>();
- //建立连接
- string url = Host.TrimEnd('/') + RemotePath;
- FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.ListDirectory);
- using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
- {
- StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);//中文文件名
- string line = reader.ReadLine();
- while (line != null)
- {
- result.Add(line);
- line = reader.ReadLine();
- }
- }
- return result;
- }
- #endregion
- #region 从FTP服务器上获取文件和文件夹列表
- /// <summary>
- /// 获取详细列表 从FTP服务器上获取文件和文件夹列表
- /// </summary>
- /// <returns></returns>
- public List<string> GetFileDetails()
- {
- List<string> result = new List<string>();
- //建立连接
- string url = Host.TrimEnd('/') + RemotePath;
- FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.ListDirectoryDetails);
- using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
- {
- StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);//中文文件名
- string line = reader.ReadLine();
- while (line != null)
- {
- result.Add(line);
- line = reader.ReadLine();
- }
- }
- return result;
- }
- #endregion
- #region 从FTP服务器上删除文件
- /// <summary>
- /// 删除FTP服务器上的文件
- /// </summary>
- /// <param name="fileName">文件名称</param>
- /// <returns>返回一个值,指示是否删除成功</returns>
- public bool DeleteFile(string fileName)
- {
- bool result = false;
- //建立连接
- string url = Host.TrimEnd('/') + RemotePath + fileName;
- FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.DeleteFile);
- using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
- {
- result = true;
- }
- return result;
- }
- #endregion
- #region 在FTP服务器上创建目录
- /// <summary>
- /// 在当前目录下创建文件夹
- /// </summary>
- /// <param name="dirName">文件夹名称</param>
- /// <returns>返回一个值,指示是否创建成功</returns>
- public bool MakeDirectory(string dirName)
- {
- bool result = false;
- //建立连接
- string url = Host.TrimEnd('/') + RemotePath + dirName;
- FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.MakeDirectory);
- using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
- {
- result = true;
- }
- return result;
- }
- #endregion
- #region 从FTP服务器上删除目录
- /// <summary>
- /// 删除文件夹
- /// </summary>
- /// <param name="dirName">文件夹名称</param>
- /// <returns>返回一个值,指示是否删除成功</returns>
- public bool DeleteDirectory(string dirName)
- {
- bool result = false;
- //建立连接
- string url = Host.TrimEnd('/') + RemotePath + dirName;
- FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.RemoveDirectory);
- using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
- {
- result = true;
- }
- return result;
- }
- #endregion
- #region 从FTP服务器上获取文件大小
- /// <summary>
- /// 获取文件大小
- /// </summary>
- /// <param name="fileName"></param>
- /// <returns></returns>
- public long GetFileSize(string fileName)
- {
- long result = 0;
- //建立连接
- string url = Host.TrimEnd('/') + RemotePath + fileName;
- FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.GetFileSize);
- using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
- {
- result = response.ContentLength;
- }
- return result;
- }
- #endregion
- #region 给FTP服务器上的文件追加内容
- /// <summary>
- /// 给FTP服务器上的文件追加内容
- /// </summary>
- /// <param name="localFile">本地文件</param>
- /// <param name="remoteFileName">FTP服务器上的文件</param>
- /// <returns>返回一个值,指示是否追加成功</returns>
- public bool Append(FileInfo localFile, string remoteFileName)
- {
- if (localFile.Exists)
- {
- using (FileStream fs = new FileStream(localFile.FullName, FileMode.Open))
- {
- return Append(fs, remoteFileName);
- }
- }
- throw new Exception(string.Format("本地文件不存在,文件路径:{0}", localFile.FullName));
- }
- /// <summary>
- /// 给FTP服务器上的文件追加内容
- /// </summary>
- /// <param name="stream">数据流(可通过设置偏移来实现从特定位置开始上传)</param>
- /// <param name="remoteFileName">FTP服务器上的文件</param>
- /// <returns>返回一个值,指示是否追加成功</returns>
- public bool Append(Stream stream, string remoteFileName)
- {
- bool result = false;
- if (stream != null && stream.CanRead)
- {
- //建立连接
- string url = Host.TrimEnd('/') + RemotePath + remoteFileName;
- FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.AppendFile);
- using (Stream rs = request.GetRequestStream())
- {
- //上传数据
- byte[] buffer = new byte[4096];//4K
- int count = stream.Read(buffer, 0, buffer.Length);
- while (count > 0)
- {
- rs.Write(buffer, 0, count);
- count = stream.Read(buffer, 0, buffer.Length);
- }
- result = true;
- }
- }
- return result;
- }
- #endregion
- #region 获取FTP服务器上的当前路径
- /// <summary>
- /// 获取FTP服务器上的当前路径
- /// </summary>
- public string CurrentDirectory
- {
- get
- {
- string result = string.Empty;
- string url = Host.TrimEnd('/') + RemotePath;
- FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.PrintWorkingDirectory);
- using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
- {
- string temp = response.StatusDescription;
- int start = temp.IndexOf('"') + 1;
- int end = temp.LastIndexOf('"');
- if (end >= start)
- {
- result = temp.Substring(start, end - start);
- }
- }
- return result;
- }
- }
- #endregion
- #region 检查当前路径上是否存在某个文件
- /// <summary>
- /// 检查文件是否存在
- /// </summary>
- /// <param name="fileName">要检查的文件名</param>
- /// <returns>返回一个值,指示要检查的文件是否存在</returns>
- public bool CheckFileExist(string fileName)
- {
- bool result = false;
- if (fileName != null && fileName.Trim().Length > 0)
- {
- fileName = fileName.Trim();
- List<string> files = GetFileList();
- if (files != null && files.Count > 0)
- {
- foreach (string file in files)
- {
- if (file.ToLower() == fileName.ToLower())
- {
- result = true;
- break;
- }
- }
- }
- }
- return result;
- }
- #endregion
- }
C# FTP操作类可用的更多相关文章
- PHP FTP操作类( 上传、拷贝、移动、删除文件/创建目录 )
/** * 作用:FTP操作类( 拷贝.移动.删除文件/创建目录 ) * 时间:2006/5/9 * 作者:欣然随风 * QQ:276624915 */ class class_ftp { publi ...
- C# FTP操作类的代码
如下代码是关于C# FTP操作类的代码.using System;using System.Collections.Generic;using System.Text;using System.Net ...
- php的FTP操作类
class_ftp.php <?php /** * 作用:FTP操作类( 拷贝.移动.删除文件/创建目录 ) */ class class_ftp { public $off; // 返回操作状 ...
- FTP操作类
using System; using System.Collections.Generic; using System.Net; using System.IO; namespace HGFTP { ...
- 很实用的FTP操作类
using System; using System.Net; using System.Net.Sockets; using System.Text; using System.IO; using ...
- FTP操作类的使用
FTP(文件传输协议) FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”.用于Internet上的控制文件的双向传输.同时,它也是一个应用程序 ...
- c# FTP操作类
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net ...
- (转)FTP操作类,从FTP下载文件
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net ...
- FTP操作类(支持异步)
public delegate void DownloadProgressChangedEventHandle(string information, long currentprogress, lo ...
随机推荐
- The application’s PagerAdapter changed the adapter’s contents without calling PagerAdapter#notifyDa
错误原因是在于修改了PageAdapter,却没有调用 PageAdapter的nodifyDataSetChanged方法.注意刷新数据 需要在主线程. 今天在做项目时出现了这个问题,一直报没有调用 ...
- 在flask中使用jsonify和json.dumps的区别
转载:https://blog.csdn.net/Duke_Huan_of_Qi/article/details/76064225
- 数学图形(1.34) peut aussi曲线
这是一种左右对称的类圆形曲线 #http://www.mathcurve.com/courbes2d/lissajous/lissajous2.shtml vertices = t = to (*PI ...
- 关于actor-critic,这篇文章写的很好
这篇文章: https://blog.csdn.net/qq_30615903/article/details/80774384 可以好好温习,包括代码,基本看懂了.
- Mysql客户端中文乱码问题解决
另一篇一样的: http://www.cnblogs.com/charlesblc/p/5973488.html 在Linux机器上使用Mysql客户端访问获取中文有时候是乱码,如下: mysql&g ...
- WeifenLuo.WinFormsUI.Docking添加关闭功能
/****************************************************************** * 创建人:HTL * 创建时间:2014-7-8 15:37: ...
- SSIS实践入门2:批量包的调度和SQLServer代理作业配置
趁着上一篇文章的余温,我们继续研究一下SSIS中多个包如何调度,难道需要一个包一个包的配置调度程序吗?显然不是的,接下来我们就说一说在SSIS应用中如何批量的调度所有的作业,本文只讲述一个基本的逻辑过 ...
- PHP封装成应用程序的三个方案
大概有三个解决方案吧. 1 如果你精通PHP,你可以看看这个网站:http://gtk.php.net/ 很明显,这个网站介绍了啥是GTK,你可以构件跨平台的图形化应用程序,当然你要再学一门语言,去掌 ...
- 算法笔记_018:旅行商问题(Java)
目录 1 问题描述 2 解决方案 2.1 蛮力法 2.2 减治法 2.2.1 Johson-Trotter算法 2.2.2 基于字典序的算法 1 问题描述 何为旅行商问题?按照非专业的说法,这个问 ...
- vnc/route/ifconfig 配置
重启网卡的方法: 1 network 利用root帐户 # service network restart ############################################## ...