C# FTP下载 采用Ssh.Net方式

不要再用FTPClient了

nuget下载Ssh.Net

然后代码如下:

/// <summary>/// SFTP操作类/// </summary>public class SFTPHelper{#region 字段或属性private SftpClient sftp;/// <summary>/// SFTP连接状态/// </summary>public bool Connected { get { return sftp.IsConnected; } }#endregion#region 构造/// <summary>/// 构造/// </summary>/// <param name="ip">IP</param>/// <param name="port">端口</param>/// <param name="user">用户名</param>/// <param name="pwd">密码</param>public SFTPHelper(string ip, string port, string user, string pwd){sftp = new SftpClient(ip, Int32.Parse(port), user, pwd);}#endregion#region 连接SFTP/// <summary>/// 连接SFTP/// </summary>/// <returns>true成功</returns>public bool Connect(){try{if (!Connected){sftp.Connect();}return true;}catch (Exception ex){// TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("连接SFTP失败,原因:{0}", ex.Message));throw new Exception(string.Format("连接SFTP失败,原因:{0}", ex.Message));}}#endregion#region 断开SFTP/// <summary>/// 断开SFTP/// </summary> public void Disconnect(){try{if (sftp != null && Connected){sftp.Disconnect();}}catch (Exception ex){// TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("断开SFTP失败,原因:{0}", ex.Message));throw new Exception(string.Format("断开SFTP失败,原因:{0}", ex.Message));}}#endregion#region SFTP上传文件/// <summary>/// SFTP上传文件/// </summary>/// <param name="localPath">本地路径</param>/// <param name="remotePath">远程路径</param>public void Put(string localPath, string remotePath){try{using (var file = File.OpenRead(localPath)){Connect();sftp.UploadFile(file, remotePath);Disconnect();}}catch (Exception ex){// TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("SFTP文件上传失败,原因:{0}", ex.Message));throw new Exception(string.Format("SFTP文件上传失败,原因:{0}", ex.Message));}}#endregion#region SFTP获取文件/// <summary>/// SFTP获取文件/// </summary>/// <param name="remotePath">远程路径</param>/// <param name="localPath">本地路径</param>public void Get(string remotePath, string localPath){try{Connect();var byt = sftp.ReadAllBytes(remotePath);Disconnect();File.WriteAllBytes(localPath, byt);}catch (Exception ex){// TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("SFTP文件获取失败,原因:{0}", ex.Message));throw new Exception(string.Format("SFTP文件获取失败,原因:{0}", ex.Message));}}#endregion#region 删除SFTP文件/// <summary>/// 删除SFTP文件 /// </summary>/// <param name="remoteFile">远程路径</param>public void Delete(string remoteFile){try{Connect();sftp.Delete(remoteFile);Disconnect();}catch (Exception ex){// TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("SFTP文件删除失败,原因:{0}", ex.Message));throw new Exception(string.Format("SFTP文件删除失败,原因:{0}", ex.Message));}}#endregion#region 获取SFTP文件列表/// <summary>/// 获取SFTP文件列表/// </summary>/// <param name="remotePath">远程目录</param>/// <param name="fileSuffix">文件后缀</param>/// <returns></returns>public ArrayList GetFileList(string remotePath, string fileSuffix){try{Connect();var files = sftp.ListDirectory(remotePath);Disconnect();var objList = new ArrayList();foreach (var file in files){string name = file.Name;if (name.Length > (fileSuffix.Length + 1) && fileSuffix == name.Substring(name.Length - fileSuffix.Length)){objList.Add(name);}}return objList;}catch (Exception ex){// TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("SFTP文件列表获取失败,原因:{0}", ex.Message));throw new Exception(string.Format("SFTP文件列表获取失败,原因:{0}", ex.Message));}}#endregion#region 移动SFTP文件/// <summary>/// 移动SFTP文件/// </summary>/// <param name="oldRemotePath">旧远程路径</param>/// <param name="newRemotePath">新远程路径</param>public void Move(string oldRemotePath, string newRemotePath){try{Connect();sftp.RenameFile(oldRemotePath, newRemotePath);Disconnect();}catch (Exception ex){// TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("SFTP文件移动失败,原因:{0}", ex.Message));throw new Exception(string.Format("SFTP文件移动失败,原因:{0}", ex.Message));}}#endregion}

调用:

   SFTPHelper sFTPHelper = new SFTPHelper("172.0.0.1", "21", "sftp", "bacd123");sFTPHelper.Get("/bak/10001.pdf", "D:\\10001.pdf");

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

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

相关文章

98. Python基础教程:try...except...finally语句

【目录】 文章目录 1. try...except...finally语法介绍2. try...except...finally执行顺序3. 捕获特定类型的异常4. 捕获所有类型的异常5. 实操练习-打开txt文件并输出文件内容 【正文】 在今天的课程中&#xff0c;我们将学习Python中的异常处理语句try...except...finally。 …

Oracle也有回收站

在数据库管理中&#xff0c;数据的删除是一个常见的操作。然而&#xff0c;有时候我们可能会意外地删除了一些重要的数据。幸运的是&#xff0c;Oracle数据库提供了一个类似于回收站的功能&#xff0c;可以帮助我们恢复被删除的数据。本文将介绍Oracle数据库中的回收站功能以及…

深度学习实际使用经验总结

以下仅是个人在使用过程中的经验总结&#xff0c;请谨慎参考。 常用算法总结 图像分类 常用算法&#xff08;可作为其他任务的骨干网络&#xff09;&#xff1a;服务端&#xff1a;VGG、ResNet、ResNeXt、DenseNet移动端&#xff1a;MobileNet、ShuffleNet等适用场景&#x…

如何使用fiddler进行抓包

首先需要下载fiddler&#xff0c;推荐使用bing搜索引擎搜索&#xff08;百度搜狗一般搜这种工具展示的前几个全都是广告&#xff09;&#xff0c;直接搜索fiddler&#xff0c;搜出来第一个fiddler官网 然后直接点击download下载 进入下载页面后&#xff0c;正确填写一个邮箱&a…

linux 动态库so相关操作

1. 查看库版本号 一般在文件名上有版本号&#xff0c;若文件名上没有版本号&#xff0c;使用如下命令查看&#xff1a; readelf -d libstdc.so 2. 查看库内函数 a) nm -d libstdc.so | grep 内容 b) objdump -tT libstdc.so | grep 内容 c) readelf -s libstdc.so | grep…

通用版Bubble_sort

❤博主CSDN:啊苏要学习 ▶专栏分类&#xff1a;C语言◀ C语言的学习&#xff0c;是为我们今后学习其它语言打好基础&#xff0c;C生万物&#xff01; 开始我们的C语言之旅吧&#xff01;✈ 目录 前言&#xff1a; 一.分析Bubble_sort 二.解决措施 三.模拟实现 前言&#xff…

【数据结构】带头+双向+循环链表(DList)(增、删、查、改)详解

一、带头双向循环链表的定义和结构 1、定义 带头双向循环链表&#xff0c;有一个数据域和两个指针域。一个是前驱指针&#xff0c;指向其前一个节点&#xff1b;一个是后继指针&#xff0c;指向其后一个节点。 // 定义双向链表的节点 typedef struct ListNode {LTDataType dat…

java判断字符串是否和空字符串(““)相等、是否和空引用(null)相等,比较顺序不同导致出现死代码(Dead code)

我在用Java实现需求的时候&#xff0c;用到了字符串跟空字符串&#xff08;“”&#xff09;比较&#xff0c;跟空引用null比较&#xff0c;两个比较语句的顺序不同&#xff0c;一个顺序出现了死代码&#xff08;Dead code&#xff09;。 下面这个代码片段&#xff0c;字符串li…

探秘二叉树后序遍历:从叶子到根的深度之旅

本篇博客会讲解力扣“145. 二叉树的后序遍历”的解题思路&#xff0c;这是题目链接。 本题的思路是&#xff1a; 先创建一个数组&#xff0c;用来存储二叉树后序遍历的结果。数组的大小跟树的结点个数有关。树的结点个数可以使用递归实现&#xff0c;即总个数左子树结点个数右…

如何将单体项目拆分成微服务

1、如何将单体项目拆分成微服务 如何拆分微服务&#xff1f;其实对不同的业务项目场景&#xff0c;对应有不同的拆分方案。需要项目人员详细的分析项目需求、团队现状、业务边界、业务逻辑等方方面面&#xff0c;拆分的粒度既不能过细&#xff0c;也不能过粗&#xff0c;需要把…

图像 检测 - FCOS: Fully Convolutional One-Stage Object Detection (ICCV 2019)

FCOS: Fully Convolutional One-Stage Object Detection - 全卷积一阶段目标检测&#xff08;ICCV 2019&#xff09; 摘要1. 引言2. 相关工作3. 我们的方法3.1 全卷积一阶目标检测器3.2 FCOS的FPN多级预测3.3 FCOS中心度 4. 实验4.1 消融研究4.1.1 FPN多级预测4.1.2 有无中心度…

Gis入门,根据起止点和一个控制点计算二阶贝塞尔曲线(共三个控制点组成的线段转曲线)

前言 本章讲解如何在gis地图中使用起止点和一个控制点(总共三个控制点)生成二阶贝塞尔曲线。 三阶贝塞尔曲线请参考下一章《Gis入门,使用起止点和两个控制点生成三阶贝塞尔曲线(共四个控制点)》 贝塞尔曲线(Bezier curve)介绍 贝塞尔曲线(Bezier curve)是一种数学…

Nim游戏博弈论

【模板】nim 游戏 题目描述 https://www.luogu.com.cn/problem/P2197 甲&#xff0c;乙两个人玩 nim 取石子游戏。 nim 游戏的规则是这样的&#xff1a;地上有 n n n 堆石子&#xff08;每堆石子数量小于 1 0 4 10^4 104&#xff09;&#xff0c;每人每次可从任意一堆石子…

GDAL C++ API 学习之路 OGRGeometry 线类 OGRLineString

OGRLineString class "ogr_geometry.h" OGRLineString 类是 OGR 库中的一个几何对象类&#xff0c;用于表示线段或折线。它由多个坐标点组成&#xff0c;并且在坐标点之间形成线段。OGRLineString 可以包含 2D、3D 或 3DM 坐标点&#xff0c;其中 M 表示额外…

前端-mac初始化配置

新电脑设置&#xff1a; Mac三指拖动&#xff1a;https://support.apple.com/zh-cn/HT204609 选取苹果菜单  >“系统设置”&#xff08;或“系统偏好设置”&#xff09;。点按“辅助功能”。点按“指针控制”&#xff08;或“鼠标与触控板”&#xff09;。点按“触控板选…

ISO 7637-2 5a/5b抛负载测试保护用TVS二极管,如何选型号?

在国际标准ISO 16750-2颁布之前&#xff0c;全球各大汽车零部件制造商一直采用的是ISO 7637-2标准。ISO 16750-2国际标准发行之后&#xff0c;汽车抛负载浪涌测试中ISO 7637-2 5A和5B测试标准被ISO 16750-2测试标准取代。查看ISO 16750-2和ISO 7637-2国际标准文档资料对比会发现…

13个ChatGPT类实用AI工具汇总

在ChatGPT爆火后&#xff0c;各种工具如同雨后春笋一般层出不穷。以下汇总了13种ChatGPT类实用工具&#xff0c;可以帮助学习、教学和科研。 01 / ChatGPT for google/ 一个浏览器插件&#xff0c;可搭配现有的搜索引擎来使用 最大化搜索效率&#xff0c;对搜索体验的提升相…

多线程(JavaEE初阶系列6)

目录 前言&#xff1a; 1.什么是线程池 2.标准库中的线程池 3.实现线程池 结束语&#xff1a; 前言&#xff1a; 在上一节中小编带着大家了解了一下Java标准库中的定时器的使用方式并给大家实现了一下&#xff0c;那么这节中小编将分享一下多线程中的线程池。给大家讲解一…

MySQL主从复制配置

Mysql的主从复制至少是需要两个Mysql的服务,当然Mysql的服务是可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。 (1)首先确保主从服务器上的Mysql版本相同 (2)在主服务器上,创建一个充许从数据库来访问的用户slave,密码为:123456 ,然后使用REPLICATION SLAV…

NoSQL-Redis集群

NoSQL-Redis集群 一、集群&#xff1a;1.单点Redis带来的问题&#xff1a;2.解决&#xff1a;3.集群的介绍&#xff1a;4.集群的优势&#xff1a;5.集群的实现方式&#xff1a; 二、集群的模式&#xff1a;1.类型&#xff1a;2.主从复制&#xff1a; 三、搭建主从复制&#xff…