C#-FTP帮助类相关操作的简单封装

目录

1、Ftp帮助类的框架封装

2、初始化Ftp连接 

3、检查Ftp连接

4、Ftp文件上传

5、Ftp文件下载

6、获取Ftp上文件/文件夹列表

7、删除Ftp文件

8、删除Ftp文件夹

9、创建Ftp文件夹

10、更改Ftp文件名

11、获取Ftp文件大小


1、Ftp帮助类的框架封装

 public class FtpHelper
{#region FTPConfigstring ftpUri;string ftpUserID;string ftpServerIP;string ftpPassword;string ftpRemotePath;#endregionprivate static Lazy<FtpHelper> instance = new Lazy<FtpHelper>(() => new FtpHelper());public static FtpHelper Default = instance.Value;private FtpHelper(){}}

2、初始化Ftp连接 

        /// <summary>  /// 初始化FTP连接/// </summary>  /// <param name="FtpServerIP">FTP连接地址</param>  /// <param name="FtpRemotePath">指定FTP连接成功后的当前目录, 如果不指定即默认为根目录</param>  /// <param name="FtpUserID">用户名</param>  /// <param name="FtpPassword">密码</param>  public void InitFtpConnect(string FtpServerIP, string FtpRemotePath, string FtpUserID, string FtpPassword){ftpServerIP = FtpServerIP;ftpRemotePath = FtpRemotePath;ftpUserID = FtpUserID;ftpPassword = FtpPassword;ftpUri = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";}

3、检查Ftp连接

        /// <summary>/// 检查Ftp连接/// </summary>/// <returns></returns>public bool CheckFtp(){try{FtpWebRequest ftprequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpUri));// ftp用户名和密码ftprequest.Credentials = new NetworkCredential(ftpUserID, ftpPassword);ftprequest.Method = WebRequestMethods.Ftp.ListDirectory;ftprequest.Timeout = 3000;FtpWebResponse ftpResponse = (FtpWebResponse)ftprequest.GetResponse();ftpResponse.Close();return true;}catch (Exception){return false;}}

4、Ftp文件上传

        /// <summary>/// Ftp文件上传/// </summary>/// <param name="localfile">本地文件名</param>/// <param name="ftpfile">Ftp文件名</param>/// <param name="pb">进度条</param>/// <exception cref="Exception"></exception>public void Upload(string localfile, string ftpfile, ProgressBar pb = null){FileInfo fileInf = new FileInfo(localfile);FtpWebRequest reqFTP;reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpUri + ftpfile));reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);reqFTP.Method = WebRequestMethods.Ftp.UploadFile;reqFTP.KeepAlive = false;reqFTP.UseBinary = true;reqFTP.ContentLength = fileInf.Length;if (pb != null){if (pb.Dispatcher.Thread != Thread.CurrentThread)Application.Current.Dispatcher.Invoke(() =>{pb.Maximum = Convert.ToInt32(reqFTP.ContentLength / 2048);pb.Maximum = pb.Maximum + 1;pb.Minimum = 0;pb.Value = 0;});else{pb.Maximum = Convert.ToInt32(reqFTP.ContentLength / 2048);pb.Maximum = pb.Maximum + 1;pb.Minimum = 0;pb.Value = 0;}}int buffLength = 2048;byte[] buff = new byte[buffLength];int contentLen;FileStream fs = fileInf.OpenRead();try{Stream strm = reqFTP.GetRequestStream();contentLen = fs.Read(buff, 0, buffLength);while (contentLen != 0){strm.Write(buff, 0, contentLen);if (pb != null){if (pb.Dispatcher.Thread != Thread.CurrentThread)Application.Current.Dispatcher.Invoke(() =>{if (pb.Value != pb.Maximum)pb.Value = pb.Value + 1;});else if (pb.Value != pb.Maximum)pb.Value = pb.Value + 1;}contentLen = fs.Read(buff, 0, buffLength);Thread.Sleep(100);}if (pb != null)if (pb.Dispatcher.Thread != Thread.CurrentThread)Application.Current.Dispatcher.Invoke(() =>{pb.Value = pb.Maximum;});elsepb.Value = pb.Maximum;strm.Close();fs.Close();}catch (Exception ex){throw new Exception(ex.Message);}}

5、Ftp文件下载

        /// <summary>/// Ftp文件下载/// </summary>/// <param name="localfilename">本地文件名</param>/// <param name="ftpfileName">Ftp文件名</param>/// <param name="pb">进度条</param>/// <exception cref="Exception"></exception>public void Download(string localfilename, string ftpfileName, ProgressBar pb = null){long fileSize = GetFileSize(ftpfileName);if (pb != null){if (pb.Dispatcher.Thread != Thread.CurrentThread)Application.Current.Dispatcher.Invoke(() =>{pb.Maximum = Convert.ToInt32(fileSize / 2048);pb.Maximum = pb.Maximum + 1;pb.Minimum = 0;pb.Value = 0;});else{pb.Maximum = Convert.ToInt32(fileSize / 2048);pb.Maximum = pb.Maximum + 1;pb.Minimum = 0;pb.Value = 0;}}try{FileStream outputStream = new FileStream(localfilename, FileMode.Create);FtpWebRequest reqFTP;reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpUri + ftpfileName));reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;reqFTP.UseBinary = true;FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();Stream ftpStream = response.GetResponseStream();int bufferSize = 2048;int readCount;byte[] buffer = new byte[bufferSize];readCount = ftpStream.Read(buffer, 0, bufferSize);while (readCount > 0){outputStream.Write(buffer, 0, readCount);if (pb != null){if (pb.Dispatcher.Thread != Thread.CurrentThread)Application.Current.Dispatcher.Invoke(() =>{if (pb.Value != pb.Maximum)pb.Value = pb.Value + 1;});else if (pb.Value != pb.Maximum)pb.Value = pb.Value + 1;}readCount = ftpStream.Read(buffer, 0, bufferSize);}if (pb != null)if (pb.Dispatcher.Thread != Thread.CurrentThread)Application.Current.Dispatcher.Invoke(() =>{pb.Value = pb.Maximum;});else pb.Value = pb.Maximum;ftpStream.Close();outputStream.Close();response.Close();}catch (Exception ex){File.Delete(localfilename);throw new Exception(ex.Message);}}

6、获取Ftp上文件/文件夹列表

        /// <summary>/// 获取Ftp上文件/文件夹列表/// </summary>/// <param name="ListType">1:文件 2:文件夹 3:文件和文件夹</param>/// <param name="Detail">是否显示详细信息</param>/// <param name="Keyword">关键词</param>/// <returns></returns>/// <exception cref="Exception"></exception>public List<string> GetFileDirectoryList(int ListType, bool Detail, string Keyword = ""){List<string> strs = new List<string>();try{FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpUri));// ftp用户名和密码reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);if (Detail)reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;elsereqFTP.Method = WebRequestMethods.Ftp.ListDirectory;WebResponse response = reqFTP.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名string line = reader.ReadLine();while (line != null){if (ListType == 1){if (line.Contains(".")){if (Keyword.Trim() == "*.*" || Keyword.Trim() == ""){strs.Add(line);}else if (line.IndexOf(Keyword.Trim()) > -1){strs.Add(line);}}}else if (ListType == 2){if (!line.Contains(".")){if (Keyword.Trim() == "*" || Keyword.Trim() == ""){strs.Add(line);}else if (line.IndexOf(Keyword.Trim()) > -1){strs.Add(line);}}}else if (ListType == 3){strs.Add(line);}line = reader.ReadLine();}reader.Close();response.Close();return strs;}catch (Exception ex){throw new Exception(ex.Message);}}

7、删除Ftp文件

        /// <summary>/// 删除Ftp文件/// </summary>/// <param name="fileName"></param>/// <exception cref="Exception"></exception>public void DeleteFile(string fileName){try{FtpWebRequest reqFTP;reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpUri + fileName));reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;reqFTP.KeepAlive = false;string result = String.Empty;FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();long size = response.ContentLength;Stream datastream = response.GetResponseStream();StreamReader sr = new StreamReader(datastream);result = sr.ReadToEnd();sr.Close();datastream.Close();response.Close();}catch (Exception ex){throw new Exception(ex.Message);}}

8、删除Ftp文件夹

        /// <summary>/// 删除Ftp文件夹/// </summary>/// <param name="urlpath"></param>/// <exception cref="Exception"></exception>public void DeleteDirectory(string urlpath){try{string uri = ftpUri + urlpath;FtpWebRequest reqFTP;reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);reqFTP.KeepAlive = false;reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;string result = String.Empty;FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();long size = response.ContentLength;Stream datastream = response.GetResponseStream();StreamReader sr = new StreamReader(datastream);result = sr.ReadToEnd();sr.Close();datastream.Close();response.Close();}catch (Exception ex){throw new Exception(ex.Message);}}

9、创建Ftp文件夹

        /// <summary>/// 创建Ftp文件夹/// </summary>/// <param name="dirName"></param>/// <exception cref="Exception"></exception>public void CreateDir(string dirName){FtpWebRequest reqFTP;try{reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpUri + dirName));reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;reqFTP.UseBinary = true;reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();Stream ftpStream = response.GetResponseStream();ftpStream.Close();response.Close();}catch (Exception ex){throw new Exception(ex.Message);}}

10、更改Ftp文件名

        /// <summary>/// 更改Ftp文件名/// </summary>/// <param name="currentFilename">当前文件名</param>/// <param name="newFilename">新文件名</param>/// <exception cref="Exception"></exception>public void ReName(string currentFilename, string newFilename){FtpWebRequest reqFTP;try{reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpUri + currentFilename));reqFTP.Method = WebRequestMethods.Ftp.Rename;reqFTP.RenameTo = newFilename;reqFTP.UseBinary = true;reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();Stream ftpStream = response.GetResponseStream();ftpStream.Close();response.Close();}catch (Exception ex){throw new Exception(ex.Message);}}

11、获取Ftp文件大小

        /// <summary>/// 获取Ftp文件大小/// </summary>/// <param name="ftpfileName">Ftp文件名</param>/// <returns></returns>/// <exception cref="Exception"></exception>public long GetFileSize(string ftpfileName){long fileSize = 0;try{FtpWebRequest reqFTP;reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpUri + ftpfileName));reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;reqFTP.UseBinary = true;FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();Stream ftpStream = response.GetResponseStream();fileSize = response.ContentLength;ftpStream.Close();response.Close();}catch (Exception ex){throw new Exception(ex.Message);}return fileSize;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/5239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中应该如何让c++工程认识.c工程编译出来的库文件?

from gpt 但是 测试此方法没问题 在 .h 文件中声明 C 函数的原型是让 C 工程认识 C 工程编译出来的库文件的关键。下面是一种常见的做法&#xff1a; 在 .h 文件中声明函数原型&#xff1a; 创建一个 .h 文件&#xff0c;其中包含要在 C 代码中调用的 C 函数的声明。这些声明…

IT外包:打通企业和IT技术人才之间的障碍

近年来&#xff0c;随着互联网信息的快速发展&#xff0c;各种企业之间的信息竞争越来越激烈&#xff0c;越来越多的企业对IT人才的需求逐渐增加。很多企业经常感叹每年都在招人&#xff0c;然而每年都不靠谱。一方面要谨慎&#xff0c;担心请神容易送神难。另一方面&#xff0…

红魔8/8Pro/8SPro手机升级安卓14版RedMagic9.0系统+降级出厂救砖刷机

红魔8系列手机也终于引来了安卓14系统的更新&#xff0c;该系统为最新的RedMagic9.0&#xff0c;目前属于公测版本&#xff0c;如果你已经升级了官方UI8.0最新版系统&#xff0c;并且拥有公测资格&#xff0c;可以直接在线检测到最新版UI9.0系统。9.0系统目前对比之前的8.0的版…

西门子:HMI小游戏-灰太狼与喜羊羊

DB块&#xff1a; HMI界面&#xff1a; 实际视频&#xff1a; 抓羊小游戏

day26 java Stream

①Stream 自己不会存储元素。 ②Stream 不会改变源对象。每次处理都会返回一个持有结果的新Stream。 ③Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。说明&#xff1a;可以把Stream想象成一条流&#xff08;流水线&#xff09;在流的上面有很多操作&…

Camera设备上晶体晶振的应用

IPC行业现状的分析 IP Camera起源于20世纪90年代&#xff0c;最早应用于监控系统中。 随着AI技术、云服务以及IoT技术的发展&#xff0c;IPC已经从安防监控向智慧城市、智能家居、自动驾驶、智能医疗等行业领域拓展&#xff0c;不单单传统地应用于工业&#xff0c;个人和家庭的…

Django-admin组件

Django-admin组件 admin是django中提供的一套可视化工具&#xff1a;用于对ORM中定义的表进行增删改查。 1 概览 在django项目启动时&#xff0c;自动找到注册到admin中的所有model中定义的类&#xff0c;然后为这些类生成一系列的URL和视图函数&#xff0c;实现基本增删改查…

提高办公效率,实现团队协作——了解ONLYOFFICE

目录 引言现代办公环境中的挑战ONLYOFFICE 一、ONLYOFFICE介绍1.ONLYOFFICE介绍2.基础功能介绍&#xff08;包括协作空间&#xff09;a.全面的办公功能可多人协作的在线文档编辑软件&#xff08;Word&#xff09;强大的在线电子表格编辑软件&#xff08;Excel&#xff09;创造精…

自动化测试web库(元素定位、元素操作、浏览器操作)

按照谷歌浏览器 Chrome &#xff1a;https://googlechromelabs.github.io/chrome-for-testing/ Chrome使用技巧&#xff1a; 1、找到自己想要的标签 打开检查&#xff0c;点击箭头&#xff0c;再点击你想要点击的地方 2、直接在浏览器上查询&#xff0c;看看是否查询成功 可…

SpringBoot+阿里云实现验证码登录注册及重置密码

开通阿里云短信服务 阿里云官网 创建API的Key 可以使用手机号或者刷脸来进行创建Key 创建成功 开通完成以后接下来实现代码请求阶段 配置maven依赖 <!-- 阿里云 oss 短信 依赖--><dependency><groupId>com.aliyun</groupId><artifactId>dysm…

三、VUE数据代理

一、初识VUE 二、再识VUE-MVVM 三、VUE数据代理 Object.defineProperty() Object.defineProperty() 静态方法会直接在一个对象上定义一个新属性&#xff0c;或修改其现有属性&#xff0c;并返回此对象。 Object.defineProperty() 数据代理 通过一个对象代理另一个对象中属…

【imazing骗局】imazing软件安全吗 需要越狱吗 为什么iPhone都会装iMazing来管理

鉴于苹果设备的封闭性与安全性&#xff0c;我们大部分情况下都需要搭配iTunes进行设备的管理。但作为一款全方位的iOS设备管理软件&#xff0c;iMazing竟然可以突破iTunes的限制&#xff0c;与设备直接连接&#xff0c;进行备份、管理等操作。 因此&#xff0c;很多人都会有疑…

1002. 【USACO题库】1.1.3 Friday the Thirteenth 黑色星期五

1002. 【USACO题库】1.1.3 Friday the Thirteenth 黑色星期五 (Input: friday.in, Output: friday.out) 时间限制: 1 s 空间限制: 256 MB 题目描述 每月 13 号刚好落在星期五的情况&#xff0c;是不是一定比落在其他星期一~星期四&#xff0c;还有落在周末的这些情况少呢&…

zynq基础知识学习(1)

Zynq和FPGA区别——快速认识Zynq开发-CSDN博客 zynq的结构 什么是ZYNQ?ZYNQ简介-CSDN博客 ZYNQ简介-CSDN博客 ZYNQ基础知识-CSDN博客 ZYNQ相关的常见概念-CSDN博客 zynq&#xff1a;组合了一个双核ARM Cortex-A9处理器和一个现场可编程门阵列(FPGA)逻辑部件。 PL和PS端通…

项目总结(一)docker总结

目录 一、引言 二、docker ------>2.1、docker介绍 ------>2.2、与虚拟机的区别 ------>2.3、Docke基本概念 ------>2.4、Docker内部结构 ------>2.5、Windows上使用docker ------>2.6、Linux上使用Docker ------>2.7、Docker常用命令 ------&g…

太速科技-基于6U CPCIe的TMS320C6678+KU060的信号处理板卡

基于6U CPCIe的TMS320C6678KU060的信号处理板卡 一、板卡概述 基于6U CPCIe的C6678KU060的信号处理板卡是新一代FPGA的高性能处理板卡。板卡采用一片TI DSP TMS320C6678和一片Xilinx公司 XCKU060-2FFVA1156I作为主处理器&#xff0c;Xilinx 的Aritex XC7A200T作为辅助处…

数据结构——栈的应用

数据结构——栈的应用 括号匹配中缀转后缀什么是中缀后缀中缀表达式 (Infix Notation)后缀表达式 (Postfix Notation, Reverse Polish Notation, RPN) 加减&#xff0c;乘除运算处理括号后缀转中缀 我们今天来看栈的应用&#xff1a; 括号匹配 栈一个经典的应用就是括号匹配&…

set_input_delay的理解

1&#xff0c;set_input_delay约束理解 input_delay是指输入的数据到达FPGA的pad引脚时相对于时钟边沿的延迟有多大&#xff0c;单位是ns&#xff0c;数值可以是正&#xff0c;也可以是负。通过set_input_delay约束告诉编译器输入时钟和输入数据的相位关系。如下图所示假设时钟…

数字IC后端先进工艺设计实现之TSMC 12nm 6Track工艺数字IC后端实现重点难点盘点

大家知道咱们社区近期TSMC 12nm ARM Cortexa-A72(1P9M 6Track Metal Stack)已经开班。这里小编要强调一点:不要认为跑了先进工艺的项目就会很有竞争力&#xff01;如果你仅仅是跑个先进工艺的flow&#xff0c;不懂先进工艺在数字IC后端实现上的不同点&#xff0c;为何有这样的不…

推荐一个wordpress免费模板下载

首页大背景图&#xff0c;首屏2张轮播图&#xff0c;轮换展示&#xff0c;效果非常的炫酷&#xff0c;非常的哇噻&#xff0c;使用这个主题搭建的wordpress网站&#xff0c;超过了200个&#xff0c;虽然是一个老主题了&#xff0c;不过是经得起时间考验的&#xff0c;现在用起来…