SFTP上传下载(C#)
sftp是ftp协议的升级版本,是牺牲上传速度为代价,换取安全性能,本人开始尝试使用Tamir.SharpSSH.dll但它对新版本的openssh 不支持,所有采用Ssh.Net方式 需要依赖:Renci.SshNet.dll 链接: http://pan.baidu.com/s/1nvuHFVN 密码: hh49
- /// <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 + ) && 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
- }
SFTP上传下载(C#)的更多相关文章
- THINKPHP 3.2 PHP SFTP上传下载 代码实现方法
一.SFTP介绍:使用SSH协议进行FTP传输的协议叫SFTP(安全文件传输)Sftp和Ftp都是文件传输协议.区别:sftp是ssh内含的协议(ssh是加密的telnet协议), 只要sshd服 ...
- Java Sftp上传下载文件
需要使用jar包 jsch-0.1.50.jar sftp上传下载实现类 package com.bstek.transit.sftp; import java.io.File; import ja ...
- Xshell5下利用sftp上传下载传输文件
sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.sftp 与 ftp 有着几乎一样的语法和功能.SFTP 为 SSH ...
- SFTP上传下载文件、文件夹常用操作
SFTP上传下载文件.文件夹常用操作 1.查看上传下载目录lpwd 2.改变上传和下载的目录(例如D盘):lcd d:/ 3.查看当前路径pwd 4.下载文件(例如我要将服务器上tomcat的日志文 ...
- java:工具(汉语转拼音,压缩包,EXCEL,JFrame窗口和文件选择器,SFTP上传下载,FTP工具类,SSH)
1.汉语转拼音: import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuP ...
- java实操之使用jcraft进行sftp上传下载文件
sftp作为临时的文件存储位置,在某些场合还是有其应景的,比如对账文件存放.需要提供一个上传的工具类.实现方法参考下: pom.xml中引入类库: <dependency> <gro ...
- java 实现Serv-U FTP 和 SFTP 上传 下载
两种ftp使用java的实现方式 ,代码都已测试 第一种:Serv-U FTP 先决条件: 1.Serv-U FTP服务器搭建成功. 2.jar包需要:版本不限制 <!--ftp上传需要的jar ...
- java之SFTP上传下载
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.ut ...
- sftp 上传下载 命令介绍
sftp是Secure FileTransferProtocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法. sftp与 ftp有着几乎一样的语法和功能.SFTP为 SSH的一部分 ...
随机推荐
- 如何通过java反射将数据库表生成实体类?
首先有几点声明: 1.代码是在别人的基础进行改写的: 2.大家有什么改进的意见可以告诉我,也可以自己改好共享给其他人: 3.刚刚毕业,水平有限,肯定有许多不足之处: 4.希望刚刚学习java的同学能有 ...
- An Introduction to Interactive Programming in Python
这是在coursera上面的一门学习pyhton的基础课程,由RICE的四位老师主讲.生动有趣,一共是9周的课程,每一周都会有一个小游戏,经历一遍,对编程会产生很大的兴趣. 所有的程序全部在老师开发的 ...
- Java中常见的几种类型转换
public class Main { public static void main(String[] args){ //Int型数字转换成字符串 int num1=123456; //方法1 St ...
- 新建linux组、用户命令
之前在安装oracle的时候,出现了一个问题:安装Oracle,新建组.用户的时候的一个错误.看这篇博客前,先看这个链接,学习要从解决出现的问题出手. 建立用户组和用户 下面总结一下Linux建立组和 ...
- qt 操作word
//修改doc QString filepath="e:\\aa.doc"; QAxWidget *word = new QAxWidget("Word.Applicat ...
- QT动画介绍(有例子可以下载)
所谓动画就是在一个时间段内的不同时间点有不同的状态,只要定义好这样状态,实现动画就是水到渠成的事情.当然做这件事情,最好用的就是状态机,点击这里查看Qt使用状态机实现动画效果实例. 不过,实现动画也有 ...
- CUDA samples 2.3节 用CUDA示例来创建CUDA项目
2.3.1. Creating CUDA Projects for Windows 略 2.3.2 Creating CUDA Projects for Linux 默认的samples的安装路径 ...
- iOS UIWebView 之 UIProgressView
之前做等待跳转都是用UIActivityIndicatorView ,后来做webView 加载页面的时候,发现了一个特别好用又超级炫酷的加载提示NJKWebViewProgress,作者巧妙的通过计 ...
- c++,命名空间(namespace)
1.什么是命名空间: 命名空间:实际上就是一个由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来. 2.命名空间 ...
- android 4.2 root
前一段因工作需要,对android4.2 进行root.但是在下载了 点击打开链接,下载了Superuser.apk,把对应的apk拷贝到system/app,su拷贝到/system/bin 与/s ...