程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> FTPClientHelper幫助類 完成文件上傳,目次操作,下載等操作

FTPClientHelper幫助類 完成文件上傳,目次操作,下載等操作

編輯:C#入門知識

FTPClientHelper幫助類 完成文件上傳,目次操作,下載等操作。本站提示廣大學習愛好者:(FTPClientHelper幫助類 完成文件上傳,目次操作,下載等操作)文章只能為提供參考,不一定能成為您想要的結果。以下是FTPClientHelper幫助類 完成文件上傳,目次操作,下載等操作正文


文檔解釋

  本文檔應用Socket通訊方法來完成ftp文件的上傳下載等敕令的履行

1.根本引見

  因為比來的項目是客戶真個法式,須要將客戶真個圖片文件【切圖】-【打包】-【ftp上傳】,如今就差最初一步了,漸漸的把這些小功效完成了,歸並到一路就是一個年夜功效了,所以一個營業須要拆分的很小很小才可以看清晰,這個項目現實須要用到哪些常識點,上面引見一下ftp上傳的敕令

  ftp敕令的參考鏈接:http://www.jb51.net/article/12199.htm
  ftp合適小文件上傳
  對帶寬請求請求較高
  辦事器平安性也要斟酌到
  敕令須要熟習,否則比擬難

2.現實項目

  文件上傳
  文件下載
  刪除文件
  創立文件夾
  文件夾重定名
  刪除文件夾
  轉變目次
  獲得文件夾中文件列表
  等等

2.1 圖片上傳和下載

https://www.aspphp.online/bianchen/UploadFiles_4619/201707/2017072810473672.png

寫了幾個辦法,普通用的最多的就是Put,詳細的可以下載復制源碼上去停止實戰一下。

2.2 目次創立和刪除

https://www.aspphp.online/bianchen/UploadFiles_4619/201707/2017072810473668.png

這個辦法明天恰好用上了,折騰了一會,才弄定的。

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
  }
}

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";
    }
  }
}

以上就是本文的全體內容,願望能給年夜家一個參考,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved