C# FTPClientHelper共公類 實現文件上傳,目錄操作,下載等動作


  本文檔使用Socket通信方式來實現ftp文件的上傳下載等命令的執行

1.基本介紹

      由於最近的項目是客戶端的程序,需要將客戶端的圖片文件【切圖】-【打包】-【ftp上傳】,現在就差最后一步了,慢慢的把這些小功能實現了,合並到一起就是一個大功能了,所以一個業務需要拆分的很小很小才可以看清楚,這個項目實際需要用到哪些知識點,下面介紹一下ftp上傳的命令

  ftp命令的參考鏈接:http://jingyan.baidu.com/article/b2c186c8ee1116c46ef6ffc8.html,這是我參考的百度,不全的地方還請大家留言告訴我一下。

  1. ftp適合小文件上傳
  2. 對帶寬要求要求較高
  3. 服務器安全性也要考慮到
  4. 命令需要熟悉,不然比較難

2.實際項目

  1. 文件上傳
  2. 文件下載
  3. 刪除文件
  4. 創建文件夾
  5. 文件夾重命名
  6. 刪除文件夾
  7. 改變目錄
  8. 獲取文件夾中文件列表
  9. 等等

2.1 圖片上傳和下載

寫了幾個方法,一般用的最多的就是Put,具體的可以下載復制源碼下來進行實戰一下。

2.2 目錄創建和刪除

這個方法今天剛好用上了,折騰了一會,才搞定的。

3.調用代碼參考

由於這個幫助類不是靜態的,所以需要實例化

string userName = "xxx";
string password = "xxx";
var ftp = new FTPClientHelper("xxx", ".", userName, password, 1021);

下面還是調用常用的方法,就可以了,因為賬號、密碼、服務器的IP地址都被我用“xxx”代替了,所以大家自己改下,還有ftp默認端口號是:1021,如果有變動還是需要自己改下的。

4.FTPClientHelper下載

//-------------------------------------------------------------------------------------
// All Rights Reserved , Copyright (C) 2015 , ZTO , Ltd .
//-------------------------------------------------------------------------------------

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

namespace ZTO.PicTest.Utilities
{
    /// <summary>
    /// FTP操作幫助類
    ///
    /// 修改紀錄
    ///
    ///          2016-4-4  版本:1.0 YangHengLian 創建主鍵,注意命名空間的排序,測試非常好。
    /// 
    /// 版本:1.0
    ///
    /// <author>
    ///        <name>YangHengLian</name>
    ///        <date>2016-4-4</date>
    /// </author>
    /// </summary>
    public class FTPClientHelper
    {
        public static object Obj = new object();

        #region 構造函數
        /// <summary>
        /// 缺省構造函數
        /// </summary>
        public FTPClientHelper()
        {
            RemoteHost = "";
            _strRemotePath = "";
            _strRemoteUser = "";
            _strRemotePass = "";
            _strRemotePort = 21;
            _bConnected = false;
        }

        /// <summary>
        /// 構造函數
        /// </summary>
        public FTPClientHelper(string remoteHost, string remotePath, string remoteUser, string remotePass, int remotePort)
        {
            // Ip地址
            RemoteHost = remoteHost;
            // 這個很重要,表示連接路徑,如果是.表示根目錄
            _strRemotePath = remotePath;
            // 登錄賬號
            _strRemoteUser = remoteUser;
            // 登錄密碼
            _strRemotePass = remotePass;
            // ftp端口號
            _strRemotePort = remotePort;

            Connect();
        }
        #endregion

        #region 字段
        private int _strRemotePort;
        private Boolean _bConnected;
        private string _strRemotePass;
        private string _strRemoteUser;
        private string _strRemotePath;

        /// <summary>
        /// 服務器返回的應答信息(包含應答碼)
        /// </summary>
        private string _strMsg;
        /// <summary>
        /// 服務器返回的應答信息(包含應答碼)
        /// </summary>
        private string _strReply;
        /// <summary>
        /// 服務器返回的應答碼
        /// </summary>
        private int _iReplyCode;
        /// <summary>
        /// 進行控制連接的socket
        /// </summary>
        private Socket _socketControl;
        /// <summary>
        /// 傳輸模式
        /// </summary>
        private TransferType _trType;

        /// <summary>
        /// 接收和發送數據的緩沖區
        /// </summary>
        private const int BlockSize = 512;

        /// <summary>
        /// 編碼方式
        /// </summary>
        readonly Encoding _ascii = Encoding.ASCII;
        /// <summary>
        /// 字節數組
        /// </summary>
        readonly Byte[] _buffer = new Byte[BlockSize];
        #endregion

        #region 屬性

        /// <summary>
        /// FTP服務器IP地址
        /// </summary>
        public string RemoteHost { get; set; }

        /// <summary>
        /// FTP服務器端口
        /// </summary>
        public int RemotePort
        {
            get
            {
                return _strRemotePort;
            }
            set
            {
                _strRemotePort = value;
            }
        }

        /// <summary>
        /// 當前服務器目錄
        /// </summary>
        public string RemotePath
        {
            get
            {
                return _strRemotePath;
            }
            set
            {
                _strRemotePath = value;
            }
        }

        /// <summary>
        /// 登錄用戶賬號
        /// </summary>
        public string RemoteUser
        {
            set
            {
                _strRemoteUser = value;
            }
        }

        /// <summary>
        /// 用戶登錄密碼
        /// </summary>
        public string RemotePass
        {
            set
            {
                _strRemotePass = value;
            }
        }

        /// <summary>
        /// 是否登錄
        /// </summary>
        public bool Connected
        {
            get
            {
                return _bConnected;
            }
        }
        #endregion

        #region 鏈接
        /// <summary>
        /// 建立連接 
        /// </summary>
        public void Connect()
        {
            lock (Obj)
            {
                _socketControl = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                var ep = new IPEndPoint(IPAddress.Parse(RemoteHost), _strRemotePort);
                try
                {
                    _socketControl.Connect(ep);
                }
                catch (Exception)
                {
                    throw new IOException("不能連接ftp服務器");
                }
            }
            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)
        {
            SendCommand(ttType == TransferType.Binary ? "TYPE I" : "TYPE A");
            if (_iReplyCode != 200)
            {
                throw new IOException(_strReply.Substring(4));
            }
            _trType = ttType;
        }

        /// <summary>
        /// 獲得傳輸模式
        /// </summary>
        /// <returns>傳輸模式</returns>
        public TransferType GetTransferType()
        {
            return _trType;
        }
        #endregion

        #region 文件操作
        /// <summary>
        /// 獲得文件列表
        /// </summary>
        /// <param name="strMask">文件名的匹配字符串</param>
        public string[] Dir(string strMask)
        {
            if (!_bConnected)
            {
                Connect();
            }
            Socket socketData = CreateDataSocket();
            SendCommand("NLST " + strMask);
            if (!(_iReplyCode == 150 || _iReplyCode == 125 || _iReplyCode == 226))
            {
                throw new IOException(_strReply.Substring(4));
            }
            _strMsg = "";
            Thread.Sleep(2000);
            while (true)
            {
                int iBytes = socketData.Receive(_buffer, _buffer.Length, 0);
                _strMsg += _ascii.GetString(_buffer, 0, iBytes);
                if (iBytes < _buffer.Length)
                {
                    break;
                }
            }
            char[] seperator = { '\n' };
            string[] strsFileList = _strMsg.Split(seperator);
            socketData.Close(); //數據socket關閉時也會有返回碼
            if (_iReplyCode != 226)
            {
                ReadReply();
                if (_iReplyCode != 226)
                {

                    throw new IOException(_strReply.Substring(4));
                }
            }
            return strsFileList;
        }

        public void NewPutByGuid(string strFileName, string strGuid)
        {
            if (!_bConnected)
            {
                Connect();
            }
            string str = strFileName.Substring(0, strFileName.LastIndexOf("\\", StringComparison.Ordinal));
            string strTypeName = strFileName.Substring(strFileName.LastIndexOf(".", StringComparison.Ordinal));
            strGuid = str + "\\" + strGuid;
            Socket socketData = CreateDataSocket();
            SendCommand("STOR " + Path.GetFileName(strGuid));
            if (!(_iReplyCode == 125 || _iReplyCode == 150))
            {
                throw new IOException(_strReply.Substring(4));
            }
            var input = new FileStream(strGuid, FileMode.Open);
            input.Flush();
            int iBytes;
            while ((iBytes = input.Read(_buffer, 0, _buffer.Length)) > 0)
            {
                socketData.Send(_buffer, iBytes, 0);
            }
            input.Close();
            if (socketData.Connected)
            {
                socketData.Close();
            }
            if (!(_iReplyCode == 226 || _iReplyCode == 250))
            {
                ReadReply();
                if (!(_iReplyCode == 226 || _iReplyCode == 250))
                {
                    throw new IOException(_strReply.Substring(4));
                }
            }
        }

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

        /// <summary>
        /// 獲取文件信息
        /// </summary>
        /// <param name="strFileName">文件名</param>
        /// <returns>文件大小</returns>
        public string GetFileInfo(string strFileName)
        {
            if (!_bConnected)
            {
                Connect();
            }
            Socket socketData = CreateDataSocket();
            SendCommand("LIST " + strFileName);
            if (!(_iReplyCode == 150 || _iReplyCode == 125
                || _iReplyCode == 226 || _iReplyCode == 250))
            {
                throw new IOException(_strReply.Substring(4));
            }
            byte[] b = new byte[512];
            MemoryStream ms = new MemoryStream();

            while (true)
            {
                int iBytes = socketData.Receive(b, b.Length, 0);
                ms.Write(b, 0, iBytes);
                if (iBytes <= 0)
                {

                    break;
                }
            }
            byte[] bt = ms.GetBuffer();
            string strResult = Encoding.ASCII.GetString(bt);
            ms.Close();
            return strResult;
        }

        /// <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)
            {
                Connect();
            }
            SendCommand("RNFR " + strOldFileName);
            if (_iReplyCode != 350)
            {
                throw new IOException(_strReply.Substring(4));
            }
            //  如果新文件名與原有文件重名,將覆蓋原有文件
            SendCommand("RNTO " + strNewFileName);
            if (_iReplyCode != 250)
            {
                throw new IOException(_strReply.Substring(4));
            }
        }
        #endregion

        #region 上傳和下載
        /// <summary>
        /// 下載一批文件
        /// </summary>
        /// <param name="strFileNameMask">文件名的匹配字符串</param>
        /// <param name="strFolder">本地目錄(不得以\結束)</param>
        public void Get(string strFileNameMask, string strFolder)
        {
            if (!_bConnected)
            {
                Connect();
            }
            string[] strFiles = Dir(strFileNameMask);
            foreach (string strFile in strFiles)
            {
                if (!strFile.Equals(""))//一般來說strFiles的最后一個元素可能是空字符串
                {
                    Get(strFile, strFolder, strFile);
                }
            }
        }

        /// <summary>
        /// 下載一個文件
        /// </summary>
        /// <param name="strRemoteFileName">要下載的文件名</param>
        /// <param name="strFolder">本地目錄(不得以\結束)</param>
        /// <param name="strLocalFileName">保存在本地時的文件名</param>
        public void Get(string strRemoteFileName, string strFolder, string strLocalFileName)
        {
            Socket socketData = CreateDataSocket();
            try
            {
                if (!_bConnected)
                {
                    Connect();
                }
                SetTransferType(TransferType.Binary);
                if (strLocalFileName.Equals(""))
                {
                    strLocalFileName = strRemoteFileName;
                }
                SendCommand("RETR " + strRemoteFileName);
                if (!(_iReplyCode == 150 || _iReplyCode == 125 || _iReplyCode == 226 || _iReplyCode == 250))
                {
                    throw new IOException(_strReply.Substring(4));
                }
                var output = new FileStream(strFolder + "\\" + strLocalFileName, FileMode.Create);
                while (true)
                {
                    int iBytes = socketData.Receive(_buffer, _buffer.Length, 0);
                    output.Write(_buffer, 0, iBytes);
                    if (iBytes <= 0)
                    {
                        break;
                    }
                }
                output.Close();
                if (socketData.Connected)
                {
                    socketData.Close();
                }
                if (!(_iReplyCode == 226 || _iReplyCode == 250))
                {
                    ReadReply();
                    if (!(_iReplyCode == 226 || _iReplyCode == 250))
                    {
                        throw new IOException(_strReply.Substring(4));
                    }
                }
            }
            catch
            {
                socketData.Close();
                _socketControl.Close();
                _bConnected = false;
                _socketControl = null;
            }
        }

        /// <summary>
        /// 下載一個文件
        /// </summary>
        /// <param name="strRemoteFileName">要下載的文件名</param>
        /// <param name="strFolder">本地目錄(不得以\結束)</param>
        /// <param name="strLocalFileName">保存在本地時的文件名</param>
        public void GetNoBinary(string strRemoteFileName, string strFolder, string strLocalFileName)
        {
            if (!_bConnected)
            {
                Connect();
            }

            if (strLocalFileName.Equals(""))
            {
                strLocalFileName = strRemoteFileName;
            }
            Socket socketData = CreateDataSocket();
            SendCommand("RETR " + strRemoteFileName);
            if (!(_iReplyCode == 150 || _iReplyCode == 125 || _iReplyCode == 226 || _iReplyCode == 250))
            {
                throw new IOException(_strReply.Substring(4));
            }
            var output = new FileStream(strFolder + "\\" + strLocalFileName, FileMode.Create);
            while (true)
            {
                int iBytes = socketData.Receive(_buffer, _buffer.Length, 0);
                output.Write(_buffer, 0, iBytes);
                if (iBytes <= 0)
                {
                    break;
                }
            }
            output.Close();
            if (socketData.Connected)
            {
                socketData.Close();
            }
            if (!(_iReplyCode == 226 || _iReplyCode == 250))
            {
                ReadReply();
                if (!(_iReplyCode == 226 || _iReplyCode == 250))
                {
                    throw new IOException(_strReply.Substring(4));
                }
            }
        }

        /// <summary>
        /// 上傳一批文件
        /// </summary>
        /// <param name="strFolder">本地目錄(不得以\結束)</param>
        /// <param name="strFileNameMask">文件名匹配字符(可以包含*和?)</param>
        public void Put(string strFolder, string strFileNameMask)
        {
            string[] strFiles = Directory.GetFiles(strFolder, strFileNameMask);
            foreach (string strFile in strFiles)
            {
                Put(strFile);
            }
        }

        /// <summary>
        /// 上傳一個文件
        /// </summary>
        /// <param name="strFileName">本地文件名</param>
        public void Put(string strFileName)
        {
            if (!_bConnected)
            {
                Connect();
            }
            Socket socketData = CreateDataSocket();
            if (Path.GetExtension(strFileName) == "")
                SendCommand("STOR " + Path.GetFileNameWithoutExtension(strFileName));
            else
                SendCommand("STOR " + Path.GetFileName(strFileName));

            if (!(_iReplyCode == 125 || _iReplyCode == 150))
            {
                throw new IOException(_strReply.Substring(4));
            }

            var input = new FileStream(strFileName, FileMode.Open);
            int iBytes;
            while ((iBytes = input.Read(_buffer, 0, _buffer.Length)) > 0)
            {
                socketData.Send(_buffer, iBytes, 0);
            }
            input.Close();
            if (socketData.Connected)
            {
                socketData.Close();
            }
            if (!(_iReplyCode == 226 || _iReplyCode == 250))
            {
                ReadReply();
                if (!(_iReplyCode == 226 || _iReplyCode == 250))
                {
                    throw new IOException(_strReply.Substring(4));
                }
            }
        }

        /// <summary>
        /// 上傳一個文件
        /// </summary>
        /// <param name="strFileName">本地文件名</param>
        /// 
        /// <param name="strGuid"> </param>
        public void PutByGuid(string strFileName, string strGuid)
        {
            if (!_bConnected)
            {
                Connect();
            }
            string str = strFileName.Substring(0, strFileName.LastIndexOf("\\", StringComparison.Ordinal));
            string strTypeName = strFileName.Substring(strFileName.LastIndexOf(".", System.StringComparison.Ordinal));
            strGuid = str + "\\" + strGuid;
            File.Copy(strFileName, strGuid);
            File.SetAttributes(strGuid, FileAttributes.Normal);
            Socket socketData = CreateDataSocket();
            SendCommand("STOR " + Path.GetFileName(strGuid));
            if (!(_iReplyCode == 125 || _iReplyCode == 150))
            {
                throw new IOException(_strReply.Substring(4));
            }
            var input = new FileStream(strGuid, FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);
            int iBytes = 0;
            while ((iBytes = input.Read(_buffer, 0, _buffer.Length)) > 0)
            {
                socketData.Send(_buffer, iBytes, 0);
            }
            input.Close();
            File.Delete(strGuid);
            if (socketData.Connected)
            {
                socketData.Close();
            }
            if (!(_iReplyCode == 226 || _iReplyCode == 250))
            {
                ReadReply();
                if (!(_iReplyCode == 226 || _iReplyCode == 250))
                {
                    throw new IOException(_strReply.Substring(4));
                }
            }
        }
        #endregion

        #region 目錄操作
        /// <summary>
        /// 創建目錄
        /// </summary>
        /// <param name="strDirName">目錄名</param>
        public void MkDir(string strDirName)
        {
            if (!_bConnected)
            {
                Connect();
            }
            SendCommand("MKD " + strDirName);
            if (_iReplyCode != 257)
            {
                throw new IOException(_strReply.Substring(4));
            }
        }

        /// <summary>
        /// 刪除目錄
        /// </summary>
        /// <param name="strDirName">目錄名</param>
        public void RmDir(string strDirName)
        {
            if (!_bConnected)
            {
                Connect();
            }
            SendCommand("RMD " + strDirName);
            if (_iReplyCode != 250)
            {
                throw new IOException(_strReply.Substring(4));
            }
        }

        /// <summary>
        /// 改變目錄
        /// </summary>
        /// <param name="strDirName">新的工作目錄名</param>
        public void ChDir(string strDirName)
        {
            if (strDirName.Equals(".") || strDirName.Equals(""))
            {
                return;
            }
            if (!_bConnected)
            {
                Connect();
            }
            SendCommand("CWD " + strDirName);
            if (_iReplyCode != 250)
            {
                throw new IOException(_strReply.Substring(4));
            }
            this._strRemotePath = strDirName;
        }
        #endregion

        #region 內部函數
        /// <summary>
        /// 將一行應答字符串記錄在strReply和strMsg,應答碼記錄在iReplyCode
        /// </summary>
        private void ReadReply()
        {
            _strMsg = "";
            _strReply = ReadLine();
            _iReplyCode = Int32.Parse(_strReply.Substring(0, 3));
        }

        /// <summary>
        /// 建立進行數據連接的socket
        /// </summary>
        /// <returns>數據連接socket</returns>
        private Socket CreateDataSocket()
        {
            SendCommand("PASV");
            if (_iReplyCode != 227)
            {
                throw new IOException(_strReply.Substring(4));
            }
            int index1 = _strReply.IndexOf('(');
            int index2 = _strReply.IndexOf(')');
            string ipData = _strReply.Substring(index1 + 1, index2 - index1 - 1);
            int[] parts = new int[6];
            int len = ipData.Length;
            int partCount = 0;
            string buf = "";
            for (int i = 0; i < len && partCount <= 6; i++)
            {
                char ch = Char.Parse(ipData.Substring(i, 1));
                if (Char.IsDigit(ch))
                    buf += ch;
                else if (ch != ',')
                {
                    throw new IOException("Malformed PASV strReply: " + _strReply);
                }
                if (ch == ',' || i + 1 == len)
                {
                    try
                    {
                        parts[partCount++] = Int32.Parse(buf);
                        buf = "";
                    }
                    catch (Exception)
                    {
                        throw new IOException("Malformed PASV strReply: " + _strReply);
                    }
                }
            }
            string ipAddress = parts[0] + "." + parts[1] + "." + parts[2] + "." + parts[3];
            int port = (parts[4] << 8) + parts[5];
            var s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            var ep = new IPEndPoint(IPAddress.Parse(ipAddress), port);
            try
            {
                s.Connect(ep);
            }
            catch (Exception)
            {
                throw new IOException("無法連接ftp服務器");
            }
            return s;
        }

        /// <summary>
        /// 關閉socket連接(用於登錄以前)
        /// </summary>
        private void CloseSocketConnect()
        {
            lock (Obj)
            {
                if (_socketControl != null)
                {
                    _socketControl.Close();
                    _socketControl = null;
                }
                _bConnected = false;
            }
        }

        /// <summary>
        /// 讀取Socket返回的所有字符串
        /// </summary>
        /// <returns>包含應答碼的字符串行</returns>
        private string ReadLine()
        {
            lock (Obj)
            {
                while (true)
                {
                    int iBytes = _socketControl.Receive(_buffer, _buffer.Length, 0);
                    _strMsg += _ascii.GetString(_buffer, 0, iBytes);
                    if (iBytes < _buffer.Length)
                    {
                        break;
                    }
                }
            }
            char[] seperator = { '\n' };
            string[] mess = _strMsg.Split(seperator);
            if (_strMsg.Length > 2)
            {
                _strMsg = mess[mess.Length - 2];
            }
            else
            {
                _strMsg = mess[0];
            }
            if (!_strMsg.Substring(3, 1).Equals(" ")) //返回字符串正確的是以應答碼(如220開頭,后面接一空格,再接問候字符串)
            {
                return ReadLine();
            }
            return _strMsg;
        }

        /// <summary>
        /// 發送命令並獲取應答碼和最后一行應答字符串
        /// </summary>
        /// <param name="strCommand">命令</param>
        public void SendCommand(String strCommand)
        {
            lock (Obj)
            {
                Byte[] cmdBytes = Encoding.ASCII.GetBytes((strCommand + "\r\n").ToCharArray());
                _socketControl.Send(cmdBytes, cmdBytes.Length, 0);
                Thread.Sleep(100);
                ReadReply();
            }
        }
        #endregion
    }
}

FTPClientHelper
FTPClientHelper

5.FTP常用的命令

#region 程序集 System.dll, v4.0.0.0
// C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll
#endregion

using System;

namespace System.Net
{
    // 摘要:
    //     System.Net.WebRequestMethods.Ftp、System.Net.WebRequestMethods.File 和 System.Net.WebRequestMethods.Http
    //     類的容器類。無法繼承此類
    public static class WebRequestMethods
    {

        // 摘要:
        //     表示可用於 FILE 請求的文件協議方法的類型。無法繼承此類。
        public static class File
        {
            // 摘要:
            //     表示用來從指定的位置檢索文件的 FILE GET 協議方法。
            public const string DownloadFile = "GET";
            //
            // 摘要:
            //     表示用來將文件復制到指定位置的 FILE PUT 協議方法。
            public const string UploadFile = "PUT";
        }

        // 摘要:
        //     表示可與 FTP 請求一起使用的 FTP 協議方法的類型。無法繼承此類。
        public static class Ftp
        {
            // 摘要:
            //     表示要用於將文件追加到 FTP 服務器上的現有文件的 FTP APPE 協議方法。
            public const string AppendFile = "APPE";
            //
            // 摘要:
            //     表示要用於刪除 FTP 服務器上的文件的 FTP DELE 協議方法。
            public const string DeleteFile = "DELE";
            //
            // 摘要:
            //     表示要用於從 FTP 服務器下載文件的 FTP RETR 協議方法。
            public const string DownloadFile = "RETR";
            //
            // 摘要:
            //     表示要用於從 FTP 服務器上的文件檢索日期時間戳的 FTP MDTM 協議方法。
            public const string GetDateTimestamp = "MDTM";
            //
            // 摘要:
            //     表示要用於檢索 FTP 服務器上的文件大小的 FTP SIZE 協議方法。
            public const string GetFileSize = "SIZE";
            //
            // 摘要:
            //     表示獲取 FTP 服務器上的文件的簡短列表的 FTP NLIST 協議方法。
            public const string ListDirectory = "NLST";
            //
            // 摘要:
            //     表示獲取 FTP 服務器上的文件的詳細列表的 FTP LIST 協議方法。
            public const string ListDirectoryDetails = "LIST";
            //
            // 摘要:
            //     表示在 FTP 服務器上創建目錄的 FTP MKD 協議方法。
            public const string MakeDirectory = "MKD";
            //
            // 摘要:
            //     表示打印當前工作目錄的名稱的 FTP PWD 協議方法。
            public const string PrintWorkingDirectory = "PWD";
            //
            // 摘要:
            //     表示移除目錄的 FTP RMD 協議方法。
            public const string RemoveDirectory = "RMD";
            //
            // 摘要:
            //     表示重命名目錄的 FTP RENAME 協議方法。
            public const string Rename = "RENAME";
            //
            // 摘要:
            //     表示將文件上載到 FTP 服務器的 FTP STOR 協議方法。
            public const string UploadFile = "STOR";
            //
            // 摘要:
            //     表示將具有唯一名稱的文件上載到 FTP 服務器的 FTP STOU 協議方法。
            public const string UploadFileWithUniqueName = "STOU";
        }

        // 摘要:
        //     表示可與 HTTP 請求一起使用的 HTTP 協議方法的類型。
        public static class Http
        {
            // 摘要:
            //     表示與代理一起使用的 HTTP CONNECT 協議方法,該代理可以動態切換到隧道,如 SSL 隧道的情況。
            public const string Connect = "CONNECT";
            //
            // 摘要:
            //     表示一個 HTTP GET 協議方法。
            public const string Get = "GET";
            //
            // 摘要:
            //     表示一個 HTTP HEAD 協議方法。除了服務器在響應中只返回消息頭不返回消息體以外,HEAD 方法和 GET 是一樣的。
            public const string Head = "HEAD";
            //
            // 摘要:
            //     表示一個 HTTP MKCOL 請求,該請求在請求 URI(統一資源標識符)指定的位置新建集合,如頁的集合。
            public const string MkCol = "MKCOL";
            //
            // 摘要:
            //     表示一個 HTTP POST 協議方法,該方法用於將新實體作為補充發送到某個 URI。
            public const string Post = "POST";
            //
            // 摘要:
            //     表示一個 HTTP PUT 協議方法,該方法用於替換 URI 標識的實體。
            public const string Put = "PUT";
        }
    }
}

WebRequestMethods
FTP常用的命令

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM