⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 class1.cs

📁 ftp 上传 下载 批量上传 批量下载
💻 CS
📖 第 1 页 / 共 2 页
字号:
using System;
using System.Net;
using System.IO;
using System.Text;
using System.Net.Sockets;

namespace FtpClientDll_cs
{
    public class FTPClient
    {
        
		#region 构造函数
		/// <summary>
		/// 缺省构造函数
		/// </summary>
		public FTPClient()
		{
			strRemoteHost  = "";
			strRemotePath  = "";
			strRemoteUser  = "";
			strRemotePass  = "";
			strRemotePort  = 21;
			bConnected     = false;
		}

		/// <summary>
		/// 构造函数
		/// </summary>
		/// <param name="remoteHost"></param>
		/// <param name="remotePath"></param>
		/// <param name="remoteUser"></param>
		/// <param name="remotePass"></param>
		/// <param name="remotePort"></param>
		public FTPClient( string remoteHost, string remotePath, string remoteUser, string remotePass, int remotePort )
		{
			strRemoteHost  = remoteHost;
			strRemotePath  = remotePath;
			strRemoteUser  = remoteUser;
			strRemotePass  = remotePass;
			strRemotePort  = remotePort;
			Connect();
		}
		#endregion

		#region 登陆
		/// <summary>
		/// FTP服务器IP地址
		/// </summary>
		private string strRemoteHost;
		public string RemoteHost
		{
			get
			{
				return strRemoteHost;
			}
			set
			{
				strRemoteHost = value;
			}
		}
		/// <summary>
		/// FTP服务器端口
		/// </summary>
		private int strRemotePort;
		public int RemotePort
		{
			get
			{
				return strRemotePort;
			}
			set
			{
				strRemotePort = value;
			}
		}
		/// <summary>
		/// 当前服务器目录
		/// </summary>
		private string strRemotePath;
		public string RemotePath
		{
			get
			{
				return strRemotePath;
			}
			set
			{
				strRemotePath = value;
			}
		}
		/// <summary>
		/// 登录用户账号
		/// </summary>
		private string strRemoteUser;
		public string RemoteUser
		{
			set
			{
				strRemoteUser = value;
			}
		}
		/// <summary>
		/// 用户登录密码
		/// </summary>
		private string strRemotePass;
		public string RemotePass
		{
			set
			{
				strRemotePass = value;
			}
		}

		/// <summary>
		/// 是否登录
		/// </summary>
		private Boolean bConnected;
		public bool Connected
		{
			get
			{
				return bConnected;
			}
		}
		#endregion

		#region 链接
		/// <summary>
		/// 建立连接 
		/// </summary>
		public void Connect()
		{
			socketControl = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
			IPEndPoint ep = new IPEndPoint(IPAddress.Parse(RemoteHost), strRemotePort);
			// 链接
			try
			{
				socketControl.Connect(ep);
			}
			catch(Exception)
			{
				throw new IOException("Couldn't connect to remote server");
			}

			// 获取应答码
			ReadReply();
			if(iReplyCode != 220)
			{
				DisConnect();
				throw new IOException(strReply.Substring(4));
			}

			// 登陆
			SendCommand("USER "+strRemoteUser);
			if( !(iReplyCode == 331 || iReplyCode == 230) )
			{
				CloseSocketConnect();//关闭连接
				throw new IOException(strReply.Substring(4));
			}
			if( iReplyCode != 230 )
			{
				SendCommand("PASS "+strRemotePass);
				if( !(iReplyCode == 230 || iReplyCode == 202) )
				{
					CloseSocketConnect();//关闭连接
					throw new IOException(strReply.Substring(4));
				}
			}
			bConnected = true;

			// 切换到目录
			ChDir(strRemotePath);
		}
    

		/// <summary>
		/// 关闭连接
		/// </summary>
		public void DisConnect()
		{
			if( socketControl != null )
			{
				SendCommand("QUIT");
			}
			CloseSocketConnect();
		}

		#endregion

		#region 传输模式

		/// <summary>
		/// 传输模式:二进制类型、ASCII类型
		/// </summary>
		public enum TransferType {Binary,ASCII};

		/// <summary>
		/// 设置传输模式
		/// </summary>
		/// <param name="ttType">传输模式</param>
		public void SetTransferType(TransferType ttType)
		{
			if(ttType == TransferType.Binary)
			{
				SendCommand("TYPE I");//binary类型传输
			}
			else
			{
				SendCommand("TYPE A");//ASCII类型传输
			}
			if (iReplyCode != 200)
			{
				throw new IOException(strReply.Substring(4));
			}
			else
			{
				trType = ttType;
			}
		}


		/// <summary>
		/// 获得传输模式
		/// </summary>
		/// <returns>传输模式</returns>
		public TransferType GetTransferType()
		{
			return trType;
		}
    
		#endregion

		#region 文件操作
		/// <summary>
		/// 获得文件列表
		/// </summary>
		/// <param name="strMask">文件名的匹配字符串</param>
		/// <returns></returns>
		public string[] Dir(string strMask)
		{
			// 建立链接
			if(!bConnected)
			{
				Connect();
			}

			//建立进行数据连接的socket
			Socket socketData = CreateDataSocket();
   
			//传送命令
			SendCommand("NLST " + strMask);

			//分析应答代码
			if(!(iReplyCode == 150 || iReplyCode == 125 || iReplyCode == 226))
			{
				throw new IOException(strReply.Substring(4));
			}

			//获得结果
			strMsg = "";
			while(true)
			{
				int iBytes = socketData.Receive(buffer, buffer.Length, 0);
                strMsg += Encoding.Default.GetString(buffer, 0, iBytes);
				if(iBytes < buffer.Length)
				{
					break;
				}
			}
			char[] seperator = "\r\n".ToCharArray();
            string[] strsFileList = strMsg.Split(seperator, StringSplitOptions.RemoveEmptyEntries);
			socketData.Close();//数据socket关闭时也会有返回码
			if(iReplyCode != 226)
			{
				ReadReply();
				if(iReplyCode != 226)
				{
					throw new IOException(strReply.Substring(4));
				}
			}
			return strsFileList;
		}
    

		/// <summary>
		/// 获取文件大小
		/// </summary>
		/// <param name="strFileName">文件名</param>
		/// <returns>文件大小</returns>
		private long GetFileSize(string strFileName)
		{
			if(!bConnected)
			{
				Connect();
			}
			SendCommand("SIZE " + Path.GetFileName(strFileName));
			long lSize=0;
			if(iReplyCode == 213)
			{
				lSize = Int64.Parse(strReply.Substring(4));
			}
			else
			{
				throw new IOException(strReply.Substring(4));
			}
			return lSize;
		}

        /// <summary>
        /// 获得文件详细信息列表
        /// </summary>
        /// <param name="strMask">文件名的匹配字符串</param>
        /// <returns></returns>
        public string[] List(string strMask)
        {
            // 建立链接
            if (!bConnected)
            {
                Connect();
            }

            //建立进行数据连接的socket
            Socket socketData = CreateDataSocket();

            //传送命令
            SendCommand("LIST " + strMask);

            //分析应答代码
            if (!(iReplyCode == 150 || iReplyCode == 125 || iReplyCode == 226))
            {
                throw new IOException(strReply.Substring(4));
            }

            //获得结果
            strMsg = "";
            while (true)
            {
                int iBytes = socketData.Receive(buffer, buffer.Length, 0);
                strMsg += Encoding.Default.GetString(buffer, 0, iBytes);
                if (iBytes < buffer.Length)
                {
                    break;
                }
            }
            char[] seperator = "\r\n".ToCharArray();
            string[] strsFileList = strMsg.Split(seperator, StringSplitOptions.RemoveEmptyEntries);
            socketData.Close();//数据socket关闭时也会有返回码
            if (iReplyCode != 226)
            {
                ReadReply();
                if (iReplyCode != 226)
                {
                    throw new IOException(strReply.Substring(4));
                }
            }
            return strsFileList;
        }


		/// <summary>
		/// 删除
		/// </summary>
		/// <param name="strFileName">待删除文件名</param>
		public void Delete(string strFileName)
		{
			if(!bConnected)
			{
				Connect();
			}
			SendCommand("DELE "+strFileName);
			if(iReplyCode != 250)
			{
				throw new IOException(strReply.Substring(4));
			}
		}
    

		/// <summary>
		/// 重命名(如果新文件名与已有文件重名,将覆盖已有文件)
		/// </summary>
		/// <param name="strOldFileName">旧文件名</param>
		/// <param name="strNewFileName">新文件名</param>
		public void Rename(string strOldFileName,string strNewFileName)
		{
			if(!bConnected)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -