收藏 分销(赏)

ftpclient..doc

上传人:xrp****65 文档编号:7045782 上传时间:2024-12-25 格式:DOC 页数:15 大小:100KB
下载 相关 举报
ftpclient..doc_第1页
第1页 / 共15页
ftpclient..doc_第2页
第2页 / 共15页
点击查看更多>>
资源描述
using System; using System.Collections.Generic; using System.Net; using System.IO; namespace FTP操作 { /// <summary> /// FTP客户端操作类 /// </summary> 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> /// 获取详细列表 /// </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="str
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服