C#实现自定义FTP操作封装类实例

 更新时间:2015年03月26日 09:26:46   作者:lele  
这篇文章主要介绍了C#实现自定义FTP操作封装类,涉及C#操作FTP的连接、传输、下载等操作的实现技巧,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了C#实现自定义FTP操作封装类。分享给大家供大家参考。具体如下:

这个C#类封装了FTP的常用操作,包括连接ftp服务器、列表服务器上的目录和文件,从ftp下载文件,上传文件到ftp服务器等等

using System;
using System.Text;
using System.IO;
namespace DotNet.Utilities
{
  public class FTPOperater
  {
    #region 属性
    private FTPClient ftp;
    /// <summary>
    /// 全局FTP访问变量
    /// </summary>
    public FTPClient Ftp
    {
      get { return ftp; }
      set { ftp = value; }
    }
    private string _server;
    /// <summary>
    /// Ftp服务器
    /// </summary>
    public string Server
    {
      get { return _server; }
      set { _server = value; }
    }
    private string _User;
    /// <summary>
    /// Ftp用户
    /// </summary>
    public string User
    {
      get { return _User; }
      set { _User = value; }
    }
    private string _Pass;
    /// <summary>
    /// Ftp密码
    /// </summary>
    public string Pass
    {
      get { return _Pass; }
      set { _Pass = value; }
    }
    private string _FolderZJ;
    /// <summary>
    /// Ftp密码
    /// </summary>
    public string FolderZJ
    {
      get { return _FolderZJ; }
      set { _FolderZJ = value; }
    }
    private string _FolderWX;
    /// <summary>
    /// Ftp密码
    /// </summary>
    public string FolderWX
    {
      get { return _FolderWX; }
      set { _FolderWX = value; }
    }
    #endregion
    /// <summary>
    /// 得到文件列表
    /// </summary>
    /// <returns></returns>
    public string[] GetList(string strPath)
    {
      if (ftp == null) ftp = this.getFtpClient();
      ftp.Connect();
      ftp.ChDir(strPath);
      return ftp.Dir("*");
    }
    /// <summary>
    /// 下载文件
    /// </summary>
    /// <param name="ftpFolder">ftp目录</param>
    /// <param name="ftpFileName">ftp文件名</param>
    /// <param name="localFolder">本地目录</param>
    /// <param name="localFileName">本地文件名</param>
    public bool GetFile(string ftpFolder, string ftpFileName, string localFolder, string localFileName)
    {
      try
      {
        if (ftp == null) ftp = this.getFtpClient();
        if (!ftp.Connected)
        {
          ftp.Connect();
          ftp.ChDir(ftpFolder);
        }
        ftp.Get(ftpFileName, localFolder, localFileName);
        return true;
      }
      catch
      {
        try
        {
          ftp.DisConnect();
          ftp = null;
        }
        catch { ftp = null; }
        return false;
      }
    }
    /// <summary>
    /// 修改文件
    /// </summary>
    /// <param name="ftpFolder">本地目录</param>
    /// <param name="ftpFileName">本地文件名temp</param>
    /// <param name="localFolder">本地目录</param>
    /// <param name="localFileName">本地文件名</param>
    public bool AddMSCFile(string ftpFolder, string ftpFileName, string localFolder, string localFileName, string BscInfo)
    {
      string sLine = "";
      string sResult = "";
      string path = "获得应用程序所在的完整的路径";
      path = path.Substring(0, path.LastIndexOf("\\"));
      try
      {
        FileStream fsFile = new FileStream(ftpFolder + "\\" + ftpFileName, FileMode.Open);
        FileStream fsFileWrite = new FileStream(localFolder + "\\" + localFileName, FileMode.Create);
        StreamReader sr = new StreamReader(fsFile);
        StreamWriter sw = new StreamWriter(fsFileWrite);
        sr.BaseStream.Seek(0, SeekOrigin.Begin);
        while (sr.Peek() > -1)
        {
          sLine = sr.ReadToEnd();
        }
        string[] arStr = sLine.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);
        for (int i = 0; i < arStr.Length - 1; i++)
        {
          sResult += BscInfo + "," + arStr[i].Trim() + "\n";
        }
        sr.Close();
        byte[] connect = new UTF8Encoding(true).GetBytes(sResult);
        fsFileWrite.Write(connect, 0, connect.Length);
        fsFileWrite.Flush();
        sw.Close();
        fsFile.Close();
        fsFileWrite.Close();
        return true;
      }
      catch (Exception e)
      {
        return false;
      }
    }
    /// <summary>
    /// 删除文件
    /// </summary>
    /// <param name="ftpFolder">ftp目录</param>
    /// <param name="ftpFileName">ftp文件名</param>
    public bool DelFile(string ftpFolder, string ftpFileName)
    {
      try
      {
        if (ftp == null) ftp = this.getFtpClient();
        if (!ftp.Connected)
        {
          ftp.Connect();
          ftp.ChDir(ftpFolder);
        }
        ftp.Delete(ftpFileName);
        return true;
      }
      catch
      {
        return false;
      }
    }
    /// <summary>
    /// 上传文件
    /// </summary>
    /// <param name="ftpFolder">ftp目录</param>
    /// <param name="ftpFileName">ftp文件名</param>
    public bool PutFile(string ftpFolder, string ftpFileName)
    {
      try
      {
        if (ftp == null) ftp = this.getFtpClient();
        if (!ftp.Connected)
        {
          ftp.Connect();
          ftp.ChDir(ftpFolder);
        }
        ftp.Put(ftpFileName);
        return true;
      }
      catch
      {
        return false;
      }
    }
    /// <summary>
    /// 下载文件
    /// </summary>
    /// <param name="ftpFolder">ftp目录</param>
    /// <param name="ftpFileName">ftp文件名</param>
    /// <param name="localFolder">本地目录</param>
    /// <param name="localFileName">本地文件名</param>
    public bool GetFileNoBinary(string ftpFolder, string ftpFileName, string localFolder, string localFileName)
    {
      try
      {
        if (ftp == null) ftp = this.getFtpClient();
        if (!ftp.Connected)
        {
          ftp.Connect();
          ftp.ChDir(ftpFolder);
        }
        ftp.GetNoBinary(ftpFileName, localFolder, localFileName);
        return true;
      }
      catch
      {
        try
        {
          ftp.DisConnect();
          ftp = null;
        }
        catch
        {
          ftp = null;
        }
        return false;
      }
    }
    /// <summary>
    /// 得到FTP上文件信息
    /// </summary>
    /// <param name="ftpFolder">FTP目录</param>
    /// <param name="ftpFileName">ftp文件名</param>
    public string GetFileInfo(string ftpFolder, string ftpFileName)
    {
      string strResult = "";
      try
      {
        if (ftp == null) ftp = this.getFtpClient();
        if (ftp.Connected) ftp.DisConnect();
        ftp.Connect();
        ftp.ChDir(ftpFolder);
        strResult = ftp.GetFileInfo(ftpFileName);
        return strResult;
      }
      catch
      {
        return "";
      }
    }
    /// <summary>
    /// 测试FTP服务器是否可登陆
    /// </summary>
    public bool CanConnect()
    {
      if (ftp == null) ftp = this.getFtpClient();
      try
      {
        ftp.Connect();
        ftp.DisConnect();
        return true;
      }
      catch
      {
        return false;
      }
    }
    /// <summary>
    /// 得到FTP上文件信息
    /// </summary>
    /// <param name="ftpFolder">FTP目录</param>
    /// <param name="ftpFileName">ftp文件名</param>
    public string GetFileInfoConnected(string ftpFolder, string ftpFileName)
    {
      string strResult = "";
      try
      {
        if (ftp == null) ftp = this.getFtpClient();
        if (!ftp.Connected)
        {
          ftp.Connect();
          ftp.ChDir(ftpFolder);
        }
        strResult = ftp.GetFileInfo(ftpFileName);
        return strResult;
      }
      catch
      {
        return "";
      }
    }
    /// <summary>
    /// 得到文件列表
    /// </summary>
    /// <param name="ftpFolder">FTP目录</param>
    /// <returns>FTP通配符号</returns>
    public string[] GetFileList(string ftpFolder, string strMask)
    {
      string[] strResult;
      try
      {
        if (ftp == null) ftp = this.getFtpClient();
        if (!ftp.Connected)
        {
          ftp.Connect();
          ftp.ChDir(ftpFolder);
        }
        strResult = ftp.Dir(strMask);
        return strResult;
      }
      catch
      {
        return null;
      }
    }
    /// <summary>
    ///得到FTP传输对象
    /// </summary>
    public FTPClient getFtpClient()
    {
      FTPClient ft = new FTPClient();
      ft.RemoteHost = this.Server;
      ft.RemoteUser = this.User;
      ft.RemotePass = this.Pass;
      return ft;
    }
  }
}

希望本文所述对大家的C#程序设计有所帮助。

相关文章

  • 快速学习c# 枚举

    快速学习c# 枚举

    这篇文章主要介绍了c# 枚举的相关知识,文中讲解非常细致,示例代码帮助大家学习,感兴趣的朋友可以了解下
    2020-06-06
  • C# 使用相同权限调用 cmd 传入命令的方法

    C# 使用相同权限调用 cmd 传入命令的方法

    本文告诉大家如何使用相同权限调用cmd并且传入命令,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-07-07
  • C#开发微信公众号接口开发

    C#开发微信公众号接口开发

    这篇文章主要介绍了C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取,需要的朋友可以参考下
    2015-07-07
  • C#串口连接的读取和发送详解

    C#串口连接的读取和发送详解

    这篇文章主要给大家介绍了关于C#串口连接的读取和发送的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • C# 时间戳转换实例

    C# 时间戳转换实例

    本文主要介绍了C# 时间戳转换实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • C#中List和数组之间转换的方法

    C#中List和数组之间转换的方法

    这篇文章主要介绍了C#中List和数组之间转换的方法,涉及比较简单的转换技巧,需要的朋友可以参考下
    2015-02-02
  • 探秘Unity游戏开发中的状态设计模式

    探秘Unity游戏开发中的状态设计模式

    这篇文章主要介绍了探秘Unity游戏开发中的状态设计模式,状态模式是Unity游戏开发中常用的一种设计模式,可以帮助开发者更好地管理游戏对象状态,提高游戏的可维护性和可扩展性
    2023-05-05
  • CPF 使用C#的Native AOT 发布程序的详细过程

    CPF 使用C#的Native AOT 发布程序的详细过程

    这篇文章主要介绍了CPF 使用C#的Native AOT 发布程序,本文给大家介绍的非常详细,对大家的学习或工作具体一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • c# RSA非对称加解密及XML&PEM格式互换方案

    c# RSA非对称加解密及XML&PEM格式互换方案

    这篇文章主要介绍了c# RSA非对称加解密及XML&PEM格式互换方案,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2020-12-12
  • C# Timer控件学习之使用Timer解决按钮幂等性问题

    C# Timer控件学习之使用Timer解决按钮幂等性问题

    Timer控件又称定时器控件或计时器控件,该控件的主要作用是按一定的时间间隔周期性地触发一个名为Tick的事件,因此在该事件的代码中可以放置一些需要每隔一段时间重复执行的程序段,这篇文章主要介绍了关于C#使用Timer解决按钮幂等性问题的相关资料,需要的朋友可以参考下
    2022-10-10

最新评论