首 页最新软件下载排行文章资讯投稿发布下载专题
维维下载站
您的位置:首页编程开发网络编程编程其它 → c#实现的.net sftp文件上传、文件删除、文件改名实例代码

c#实现的.net sftp文件上传、文件删除、文件改名实例代码

来源:维维整理 发布时间:2017-9-11 7:20:42 人气:

c#实现的.net sftp文件上传、文件删除、文件改名实例代码是小编为大家整理的一个很实用的例子代码,这个C#文件操作例子代码包括SFTP上传文件、获取文件列表、删除文件、文件重命名等功能,不过本实例并非一个完整的C#项目,只是与此相关的代码,仅供大家参考,,赶紧来看看下面的文章介绍吧:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Renci.SshNet;
using System.IO;
using System.Threading;
namespace SFTP_VS
{
    public class SFtpClient : IFtpClient
    {
        SftpClient sftp = null;
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="host">sftp服务器名或IP</param>
        /// <param name="port">端口,默认22</param>
        /// <param name="user"></param>
        /// <param name="privateKey"></param>
        /// <param name="passPhrase"></param>
        public SFtpClient(string host, int? port, string user, string privateKey, string passPhrase)
        {
            PrivateKeyFile keyFile = null;
            if (string.IsNullOrEmpty(passPhrase))
            {
                keyFile = new PrivateKeyFile(privateKey);
            }
            else
            {
                keyFile = new PrivateKeyFile(privateKey, passPhrase);
            }
            if (port.HasValue)
            {
                sftp = new SftpClient(host, port.Value, user, keyFile);
            }
            else
            {
                sftp = new SftpClient(host, user, keyFile);
            }
            if (sftp != null)
            {
                sftp.ConnectionInfo.RetryAttempts = 5;
                sftp.ConnectionInfo.Timeout = new TimeSpan(0, 3, 0);
            }
        }
        public bool Connect()
        {
            if (sftp == null)
            {
                return false;
            }
            if (sftp.IsConnected)
            {
                return true;
            }
            try
            {
                sftp.Connect();
                return true;
            }
            catch (Exception ex)
            {
                string server = string.Format("{0}:{1}", sftp.ConnectionInfo.Username, sftp.ConnectionInfo.Host);
                // 我用的是nLog来记录错误日志。
                // logger.Error("[{0}] SFTP连接发生错误。", server, ex);
                return false;
            }
        }
        public void DisConnect()
        {
            if (sftp == null)
            {
                return;
            }
            if (!sftp.IsConnected)
            {
                return;
            }
            try
            {
                sftp.Disconnect();
                sftp.Dispose();
                sftp = null;
            }
            catch (Exception ex)
            {
                //logger.Error("SFTP断开连接发生错误。", ex);
            }
        }
        /// <summary>
        /// 取得文件列表
        /// </summary>
        /// <param name="path">路径</param>
        /// <returns></returns>
        public List<string> ListFiles(string path)
        {
            if (!Connect())
            {
                return null;
            }
            List<string> files = new List<string>();
            try
            {
                sftp.ChangeDirectory("/");
                sftp.ListDirectory(path).ToList().ForEach(f =>
                {
                    files.Add(f.FullName);
                });
                return files;
            }
            catch (Exception ex)
            {
                // logger.Error("[{0}] 取得文件列表发生错误。", Path, ex);
                return null;
            }
        }
        /// <summary>
        /// 下载文件 
        /// </summary>
        /// <param name="remoteFileName">包含全路径的服务器端文件名</param>
        /// <param name="localFileName">本地保存的文件名</param>
        /// <returns></returns>
        public bool Download(string remoteFileName, string localFileName)
        {
            if (!Connect())
            {
                return false;
            }
            try
            {
                sftp.ChangeDirectory("/");
                FileStream fs = File.OpenWrite(localFileName);
                sftp.DownloadFile(remoteFileName, fs);
                fs.Close();
                return true;
            }
            catch (Exception ex)
            {
                //logger.Error("[{0}] 文件下载发生错误。", remoteFileName, ex);
                return false;
            }
        }
        /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="localFileName">待上传的文件</param>
        /// <param name="remoteFileName">服务器端文件名</param>
        /// <returns></returns>
        public bool Upload(string localFileName, string remoteFileName)
        {
            if (!Connect())
            {
                return false;
            }
            try
            {
                sftp.ChangeDirectory("/");
                FileStream fs = File.OpenRead(localFileName);
                sftp.UploadFile(fs, remoteFileName, true);
                fs.Close();
                Thread.Sleep(1000);
                return true;
            }
            catch (Exception ex)
            {
                //logger.Error("[{0}] 文件上传发生错误。", localFileName, ex);
                return false;
            }
        }
        /// <summary>
        /// 文件改名
        /// </summary>
        /// <param name="localFileName">包含全路径的源文件名</param>
        /// <param name="remoteFileName">包含全路径的新文件名</param>
        /// <returns></returns>
        public bool Rename(string orgFileName, string newFileName)
        {
            if (!Connect())
            {
                return false;
            }
            try
            {
                sftp.ChangeDirectory("/");
                sftp.RenameFile(orgFileName, newFileName);
                return true;
            }
            catch (Exception ex)
            {
                //logger.Error("[{0}] 文件改名发生错误。", localFileName, ex);
                return false;
            }
        }
        /// <summary>
        /// 删除文件
        /// </summary>
        /// <param name="orgFileName"></param>
        /// <param name="newFileName"></param>
        /// <returns></returns>
        public bool Delete(string fileName)
        {
            if (!Connect())
            {
                return false;
            }
            try
            {
                sftp.ChangeDirectory("/");
                sftp.DeleteFile(fileName);
                return true;
            }
            catch (Exception ex)
            {
                //logger.Error("[{0}] 文件删除发生错误。", localFileName, ex);
                return false;
            }
        }
    }
}
相关下载
栏目导航
本类热门阅览