C#开发-FTP操作方法整理 2--C# FTP操作类

本文介绍了C#中FTP操作的实现,包括创建多级目录、批量删除、整个目录上传与下载等功能。通过FtpHelper类的详细代码示例,展示了如何进行FTP文件管理,如删除目录、上传单个和多个文件、下载文件和目录以及创建目录等操作。
摘要由CSDN通过智能技术生成

C#开发-FTP操作方法整理

1.整理简化了下C#的ftp操作,方便使用

1.支持创建多级目录
2.批量删除
3.整个目录上传
4.整个目录删除
5.整个目录下载
2.调用方法展示,

var ftp = new FtpHelper(“10.136.12.11”, “qdx1213123”, “123ddddf”);//初始化ftp,创建ftp对象
ftp.DelAll(“test”);//删除ftptest目录及其目录下的所有文件
ftp.UploadAllFile(“F:\test\wms.zip”);//上传单个文件到指定目录
ftp.UploadAllFile(“F:\test”);//将本地test目录的所有文件上传
ftp.DownloadFile(“test\wms.zip”, “F:\test1”);//下载单个目录
ftp.DownloadAllFile(“test”, “F:\test1”);//批量下载整个目录
ftp.MakeDir(“aaa\bbb\ccc\ddd”);//创建多级目录

3.FtpHelper 代码。

1.异常方法委托,通过Lamda委托统一处理异常,方便改写。加了个委托方便控制异常输出
2.ftp的删除需要递归查找所有目录存入list,然后根据 level倒序排序,从最末级开始遍历删除
3.其他的整个目录操作都是同上

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.IO;

namespace MyStuday
{
///
/// ftp帮助类
///
public class FtpHelper
{
private string ftpHostIP { get; set; }
private string username { get; set; }
private string password { get; set; }
private string ftpURI { get { return $@”ftp://{ftpHostIP}/”; } }

    /// <summary>
    /// 初始化ftp参数
    /// </summary>
    /// <param name="ftpHostIP">ftp主机IP</param>
    /// <param name="username">ftp账户</param>
    /// <param name="password">ftp密码</param>
    public FtpHelper(string ftpHostIP, string username, string password)
    {
        this.ftpHostIP = ftpHostIP;
        this.username = username;
        this.password = password;
    }

    /// <summary>
    /// 异常方法委托,通过Lamda委托统一处理异常,方便改写
    /// </summary>
    /// <param name="method">当前执行的方法</param>
    /// <param name="action"></param>
    /// <returns></returns>
    private bool MethodInvoke(string method, Action action)
    {
        if (action != null)
        {
            try
            {
                action();
                //Logger.Write2File($@"FtpHelper.{method}:执行成功");
                FluentConsole.Magenta.Line($@"FtpHelper({ftpHostIP},{username},{password}).{method}:执行成功");
                return true;
            }
            catch (Exception ex)
            {
                FluentConsole.Red.Line($@"FtpHelper({ftpHostIP},{username},{password}).{method}:执行失败:\n {ex}");
                // Logger.Write2File(FtpHelper({ftpHostIP},{username},{password}).{method}:执行失败 \r\n{ex}");
                return false;
            }
        }
        else
        {
            return false;
        }
    }

    /// <summary>
    /// 异常方法委托,通过Lamda委托统一处理异常,方便改写
    /// </summary>
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="method"></param>
    /// <param name="func"></param>
    /// <returns></returns>
    private T MethodInvoke<T>(string method, Func<T> func)
    {
        if (func != null)
        {
            try
            {
                //FluentConsole.Magenta.Line($@"FtpHelper({ftpHostIP},{username},{password}).{method}:执行成功");
                //Logger.Write2File($@"FtpHelper({ftpHostIP},{username},{password}).{method}:执行成功");
                return func();
            }
            catch (Exception ex)
            {
                //FluentConsole.Red.Line($@"FtpHelper({ftpHostIP},{username},{password}).{method}:执行失败:").Line(ex);
                // Logger.Write2File($@"FtpHelper({ftpHostIP},{username},{password}).{method}:执行失败 \r\n{ex}");
                return default(T);
            }
        }
        else
        {
            return default(T);
        }
    }
    private FtpWebRequest GetRequest(string URI)
    {
        //根据服务器信息FtpWebRequest创建类的对象
        FtpWebRequest result = (FtpWebRequest)WebRequest.Create(URI);
        result.Credentials = new NetworkCredential(username, password);
        result.KeepAlive = false;
        result.UsePassive = false;
        result.UseBinary = true;
        return result;
    }

    /// <summary> 上传文件</summary>
    /// <param name="filePath">需要上传的文件路径</param>
    /// <param name="dirName">目标路径</param>
    public bool UploadFile(string filePath, string dirName = "")
    {
        FileInfo fileInfo = new FileInfo(filePath);
        if (dirName != "") MakeDir(dirName);//检查文件目录,不存在就自动创建
        string uri = Path.Combine(ftpURI, dirName, fileInfo.Name);
        return MethodInvoke($@"uploadFile({filePath},{dirName})", () =>
        {
            FtpWebRequest ftp = GetRequest(uri);
            ftp.Method = WebRequestMethods.Ftp.UploadFile;
            ftp.ContentLength = fileInfo.Length;
            int buffLength = 2048;
            byte[] buff = new byte[buffLength];
            int contentLen;
            using (FileStream fs = fileInfo.OpenRead())
            {
                using (Stream strm = ftp.GetRequestStream())
                {
                    contentLen = fs.Read(buff, 0, buffLength);
                    while (contentLen != 0)
                    {
                        strm.Write(buff, 0, contentLen);
                        contentLen = fs.Read(buff, 0, buffLength);
                    }
                    strm.Close();
                }
                fs.Close();
            }
        });
    }

    /// <summary>
    /// 从一个目录将其内容复制到另一目录
    /// </summary>
    /// <param name="localDir">源目录</param>
    /// <param name="DirName">目标目录</param>
    public void UploadAllFile(string localDir, string DirName = "")
    {
        string localDirName = string.Empty;
        int targIndex = localDir.LastIndexOf("\\");
        if (targIndex > -1 &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值