首页 > 其他分享 >通过代码连接FTP,下载指定目录的文件

通过代码连接FTP,下载指定目录的文件

时间:2023-10-25 18:23:50浏览次数:30  
标签:FTP Exception string 文件 代码 SFTP ex var 目录

 1         #region 从SFTP下载文件
 2                 var copy_sftp_result = GetSftpFile();
 3                 if (!copy_sftp_result)
 4                 {
 5                     return false;
 6                 }
 7               #endregion
 8 
 9               #region 备份通讯录
10                 var backResult = BackUpContacts(SyncSn);
11                 if (!backResult)
12                 {
13                     return false;
14                 }
15                #endregion

第一步:

  从SFTP下载文件

public static bool GetSftpFile()
        {
            try
            {
                var sftpHelper = new SFTPHelper();

                //Workday SFTP文件地址
                var sftpPath_Regular = "/CSV_Source/STG_RPT_DIM_CLT_TY_PROD_M/STG_RPT_DIM_CLT_TY_PROD_M.csv";

                //验证SFTP文件是否存在
                var sftpPath_Regular_IsExist = sftpHelper.IsExist(sftpPath_Regular);

                FileHelper.WriteLogFile(logFilePath + "SFTP_File_IsExist", $"sftpPath_Regular_IsExist={sftpPath_Regular_IsExist};");

                if (!sftpPath_Regular_IsExist)
                {
                    return false;
                }

                Common.DirHelper.CheckFolder(FileSavePath);

                //通讯录Csv文件备份本地存储地址
                localPath_Regular = FileSavePath + $"STG_RPT_DIM_CLT_TY_PROD_M.csv";

                //从SFTP下载文件
                sftpHelper.Get(sftpPath_Regular, localPath_Regular);

                //本地通讯录文件是否存在
                var localPath_Regular_IsExist = FileHelper.IsFileExists(localPath_Regular);
                FileHelper.WriteLogFile(logFilePath + "Local_File_IsExist", $"localPath_Regular_IsExist={localPath_Regular_IsExist};");

                return localPath_Regular_IsExist;
            }
            catch (Exception e)
            {
                FileHelper.WriteLogFile(logFilePath + "GetSftpFile_Err", e.Message);
                return false;
            }
        }

第二步:

  备份通讯录

  

public static bool BackUpContacts(Guid SyncSn)
        {
            try
            {

                DataTable datatable_regular = new DataTable();  //正式工DataTable

                #region 如果通讯录文件是Excel
                //FileStream fileStream_regular = new FileStream(excelPath_Regular, FileMode.Open); //将Excel文件读取到文件流
                //datatable_regular = ImportFileHelper.ExcelToDataTable(fileStream_regular, "Employee_Snapshot_Wechat.xlsx", "", true);
                //FileStream fileStream_contingent = new FileStream(excelPath_Contingent, FileMode.Open); //将Excel文件读取到文件流
                //datatable_contingent = ImportFileHelper.ExcelToDataTable(fileStream_contingent, "Contingent_Worker_Wechat.xlsx", "", true);
                #endregion

                #region 如果通讯录文件是Csv
                StreamReader reader1 = new StreamReader(localPath_Regular, Encoding.UTF8, false);
                datatable_regular = ImportFileHelper.CsvToDataTable(reader1, 0);
                #endregion

                #region 备份正式工

                //同步听众-岗位关系(目标医生表)
                //r.data = r.data.Where(o => o.client_status.Equals("有效") && o.mth == DateTime.Now.ToString("yyyyMM")).ToList();
                var insert_sql = string.Empty;
                var insert_sql_Priority = string.Empty;
                var i_insert = 0;
                var i_insert_Priority = 0;
                foreach (DataRow row in datatable_regular.Rows)
                {
                    i_insert++;
                    insert_sql += $"INSERT INTO table(SyncSn,a_id,b_id)"
                               + $" VALUES('{SyncSn}', '{row[18].ToString()}', '{row[5].ToString()}');";
                    if (i_insert >= 500)
                    {
                        //插入数据
                        if (!string.IsNullOrWhiteSpace(insert_sql))
                        {
                            db_mdm_log.ExecuteNonQuerySql(insert_sql);
                        }
                        insert_sql = string.Empty;
                        i_insert = 0;
                    }
                }

                #endregion

                #region 备份完成后将文件移动,并重命名,如【Employee_Snapshot_Wechat_Synced_In_20171219135723.xlsx】
                //UploadFileToSftp();
                #endregion

                return true;
            }
            catch (Exception e)
            {
                //备份通讯录失败
                FileHelper.WriteLogFile(logFilePath + "BackUpContacts_Err", e.Message);
                return false;
            }
        }

 涉及文件:SFTPHelper

using Renci.SshNet;
using System;
using System.Collections;
using System.IO;

namespace Common
{
    public class SFTPHelper
    {
        private const string host = "114.67.000.000"; //FTP Host sftp.amgen.com
        private const int port = 000; //FTP 端口
        private const string userName = "User"; //FTP 账号
        private const string password = "123456"; //FTP 密码

        #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 host, int port, string user, string pwd)
        {
            sftp = new SftpClient(host, port, user, pwd);
            Connect();
        }

        public SFTPHelper() : this(host, port, userName, password) { }
        #endregion

        #region 连接SFTP
        /// <summary>
        /// 连接SFTP
        /// </summary>
        /// <returns>true成功</returns>
        public bool Connect()
        {
            try
            {
                if (!Connected)
                {
                    sftp.Connect();
                }
                return true;
            }
            catch (Exception ex)
            {
                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)
            {
                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)
            {
                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)
            {
                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)
            {
                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)
        {
            try
            {
                Connect();
                var files = sftp.ListDirectory(remotePath);
                Disconnect();
                var objList = new ArrayList();
                foreach (var file in files)
                {
                    string name = file.Name;
                    objList.Add(name);
                }
                return objList;
            }
            catch (Exception ex)
            {
                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)
            {
                throw new Exception(string.Format("SFTP文件移动失败,原因:{0}", ex.Message));
            }
        }
        #endregion

        public bool IsExist(string remotePath)
        {
            try
            {
                Connect();
                var result = sftp.Exists(remotePath);
                Disconnect();
                return result;
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("SFTP文件验证是否存在失败,原因:{0}", ex.Message));
            }
        }
    }
}

  

备注:需要手动引包:Renci.SshNet

 

标签:FTP,Exception,string,文件,代码,SFTP,ex,var,目录
From: https://www.cnblogs.com/wzzcc/p/17787831.html

相关文章

  • idea工具git其它分支代码合并到master分支上
    第一步:先提交本地代码到test分支上第二步:切到master分支上,选中要合并的版本,点击Cherry-Pick注意:先切换到master分支上更新代码,再操作第二、三步。 第三步:push一下就好了 ......
  • AI大语言模型+iThinkAir多维表格|打造零代码AI应用
    迄今为止,大语言模型主要以聊天的产品形态面向用户。ChatGPT、文心一言等已经成为人尽皆知的名词,基于ChatGPT、文心一言等的套壳聊天产品也层出不穷让人眼花缭乱。但是,如果要在工作中真正利用大语言模型来进行提效,聊天可能并不是很高效的一种形式。聊天的方式刚开始很吸引人,但是长期......
  • c# 读取project 内容代码demo
    1.安装安装office,需要使用其中的dll,或者直接使用下面的dll  2.引用添加此dll引用到项目中,并且嵌入互操作类型设置为false,否则代码中使用MSProject.ApplicationClass 会报错   3.读取demo:  public  ActionResultImport(HttpPostedFileBasefile)    ......
  • Ftp主被动模式
    ftp[-pinegvd][host]pftp[-inegvd][host]用户通过ftp这个程序来使用Internet上的标准文件传输协议(FTP)。本程序允许用户向远端网站发送文件,或从远端网站接收文件。注意:CentOS7中需要自己安装此程序。(1).参数选项参数选项可以在命令行启动ftp时指定,也可以在ftp命令解释模......
  • 写代码的规范
    1、函数的参数不得超过5个,过多会造成混乱,难于理解/少于3个参数:当参数少于3个时,函数通常比较容易理解,参数之间的关系也较为明显。这种情况下,函数通常不会被认为参数太多。3到5个参数:这是一种常见的情况,尤其是在需要传递多个相关信息的函数中。然而,如果参数过多,可能......
  • python win32com加密表格文件;加密目录下的所有表格文件
    需求背景:写一个工具,对指定路径下的所有Excel文件进行加密,设置打开密码和编辑密码实现思路:需要用python遍历指定目录下的所有文件,判断是否是EXCEl文件,还要判断文件是否原本就有密码,加密完成后将结果写入到文本文件代码:importosimporttkinterimporttkinter.filedialogfrom......
  • window平台下Emacs Home目录的修改
    现在Emacs的Home目录会随机生成了,default-directory等已经不起作用了,查找了网上各种方法。下面这种方法是最方便的在控制台(cmd)中执行下面的命令:SETXEMACS_HOME"D:\Documents\Programming\emacshome"添加环境变量(这里是用户变量)或手动添加环境变量(系统变量也可以),这里的变量名E......
  • 详解Linux中FTP命令 (ftp命令 linux)
    Linux中FTP命令详解FTP(FileTransferProtocol)是一种用于在网络上传输文件的标准协议。在Linux操作系统中,可以使用FTP命令进行文件的上传和下载,而无需使用第三方工具。本文将详细介绍Linux中FTP命令的使用方法和相关技巧。一、FTP命令概述FTP命令是Linux中自带的命令之一,用于连......
  • win10_Git基于WSL(Linux子系统)统计代码行数命令
    win10_Git基于WSL(Linux子系统)统计代码行数命令一、引言找到的基于git统计代码行数的命令,一般都是基于linux系统的shell命令。在使用mac电脑或者linux系统开发时,执行这些命令比较方便。但是还有大部分人是使用windows做开发,这时就遇到麻烦了,因为基于shell的统计命令不能在windows系......
  • 公司新来了个同事,代码写得是真优雅呀!代码如诗!
    来源:https://www.cnblogs.com/liuboren/p/17017421.html0.前言本篇文章是<<代码整洁之道>>的学习总结,通过这篇文章你将了解到整洁的代码对项目、公司和你的重要性,以及如何书写整洁的代码.通过命名、类、函数、测试这四个章节,使我们的代码变得整洁.1.为什么要保持代码整洁?......