SSIS 学习之旅 FTP访问类

这章把脚本任务访问FTP的方法 全部给大家。

控件的使用大家如果有不懂得可以看下我之前的文章。
第一章:SSIS 学习之旅 第一个SSIS 示例(一)(上)

第二章:SSIS 学习之旅 第一个SSIS 示例(二)

第三章:SSIS 学习之旅 数据同步

第四章:SSIS 学习之旅 FTP文件传输-FTP任务

第五章:SSIS 学习之旅 FTP文件传输-脚本任务

        #region 连接FTP服务器
        /// <summary>
        /// 连接FTP服务器
        /// </summary>
        /// <param name="FtpServerIP">FTP连接地址</param>
        /// <param name="FtpRemotePath">指定FTP连接成功后的当前目录, 如果不指定即默认为根目录</param>
        public string FTPHelper(string FtpServerIP, string FtpRemotePath)
        {
            string ftpURI = "ftp://" + FtpServerIP + "/" + FtpRemotePath + "/";
            return ftpURI;
        }

        #endregion

        #region 文件上传FTP服务器
        /// <summary>
        /// 上传
        /// </summary>
        /// <param name="FilePathPendingAndName">文件详细路径</param>
        /// <param name="FTPUrl">FTPUrl</param>
        /// <param name="FTP_UserName">用户名</param>
        /// <param name="FTP_PWD">密码</param>
        public void Upload(string FilePathPendingAndName, string FTPUrl, string FTP_UserName, string FTP_PWD)
        {
            FileInfo fileInf = new FileInfo(FilePathPendingAndName);
            FtpWebRequest reqFTP;
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(FTPUrl + fileInf.Name));
            reqFTP.Credentials = new NetworkCredential(FTP_UserName, FTP_PWD);
            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
            reqFTP.KeepAlive = false;
            reqFTP.UseBinary = true;
            reqFTP.ContentLength = fileInf.Length;
            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);
                    contentLen = fs.Read(buff, 0, buffLength);
                }
                strm.Close();
                fs.Close();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

      #endregion

        #region 下载文件
        /// <summary>
        /// 下载文件
        /// </summary>
        /// <param name="filePath">本地路径</param>
        /// <param name="fileName">文件名</param>
        /// <param name="ftpUrl">FTP链接路径</param>
        /// <param name="FTP_UserName">用户名</param>
        /// <param name="FTP_PWD">密码</param>
        public void Download(string filePath, string fileName, string ftpUrl, string FTP_UserName, string FTP_PWD)
        {
            try
            {
                FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);
                FtpWebRequest reqFTP;

                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpUrl + fileName));
                reqFTP.Credentials = new NetworkCredential(FTP_UserName, FTP_PWD);
                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
                reqFTP.UseBinary = true;
                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                Stream ftpStream = response.GetResponseStream();
                long cl = response.ContentLength;
                int bufferSize = 2048;
                int readCount;
                byte[] buffer = new byte[bufferSize];
                readCount = ftpStream.Read(buffer, 0, bufferSize);
                while (readCount > 0)
                {
                    outputStream.Write(buffer, 0, readCount);
                    readCount = ftpStream.Read(buffer, 0, bufferSize);
                }
                ftpStream.Close();
                outputStream.Close();
                response.Close();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        #endregion

     #region 删除文件
        /// <summary>
        /// 删除文件
        /// </summary>
        public void Delete(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);
            }
        }
     #endregion

    #region 获取当前目录下文件列表(不包括文件夹)
        /// <summary>
        /// 获取当前目录下文件列表(不包括文件夹)
        /// </summary>
        /// <param name="url">连接FTP服务器地址</param>
        /// <param name="ftpUserName">用户名</param>
        /// <param name="ftpPassword">密码</param>
        /// <returns></returns>
        public string[] GetFileList(string url, string ftpUserName, string ftpPassword)
        {
            StringBuilder result = new StringBuilder();
            FtpWebRequest reqFTP;
            try
            {
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));
                reqFTP.UseBinary = true;
                reqFTP.Credentials = new NetworkCredential(ftpUserName, ftpPassword);

                reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;

                WebResponse response = reqFTP.GetResponse();

                StreamReader reader = new StreamReader(response.GetResponseStream());

                string line = reader.ReadLine();

                string FileName = "";
                while (line != null)
                {

                    if (line.IndexOf("<DIR>") == -1)
                    {
                        FileName = "";
                        FileName =  Regex.Match(line, @"(?<=IN)([.\S\s]*)(?=csv)", RegexOptions.IgnoreCase).Value.ToString() ;
                        if (FileName.Trim() != "")
                        {
                            FileName = "IN" + FileName + "csv";
                            result.Append(FileName + "|");
                        }
                    }
                    line = reader.ReadLine();
                }
                //result.Remove(result.ToString().LastIndexOf(‘\n‘), 1);
                reader.Close();
                response.Close();
            }
            catch (Exception ex)
            {
                throw (ex);
            }
            return result.ToString().Split(‘|‘);
        }

        #endregion

        #region 判断当前目录下指定的文件是否存在
        /// <summary>
        /// 判断当前目录下指定的文件是否存在
        /// </summary>
        /// <param name="RemoteFileName">远程文件名</param>
        public bool FileExist(string FTPUrl, string RemoteFileName, string FTP_UserName, string FTP_PWD)
        {

            string FileName = "IN_NORMAL_" + Regex.Match(RemoteFileName, @"(?<=IN_NORMAL_)([.\S\s]*)(?=csv)", RegexOptions.IgnoreCase).Value.ToString() + "csv"; 

            string[] fileList = GetFileList(FTPUrl, FTP_UserName, FTP_PWD);
            foreach (string str in fileList)
            {
                if (str.Trim()==FileName.Trim())
                {
                    return true;
                }
            }
            return false;
        }
        #endregion

        #region 更改文件名
        /// <summary>
        /// 更改文件名
        /// </summary>
        /// <param name="currentFilename">现有文件名称</param>
        /// <param name="newDirectory">新的文件名称</param>
        /// <param name="FTPUrl">FTPUrl</param>
        /// <param name="FTP_UserName">用户名</param>
        /// <param name="FTP_PWD">密码</param>
        public void ReName(string currentFilename, string newFilename, string FTPUrl, string FTP_UserName, string FTP_PWD)
        {
            FtpWebRequest reqFTP;
            try
            {
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(FTPUrl + currentFilename));
                reqFTP.Method = WebRequestMethods.Ftp.Rename;
                reqFTP.RenameTo = newFilename;
                reqFTP.UseBinary = true;

                reqFTP.Credentials = new NetworkCredential(FTP_UserName, FTP_PWD);
                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                Stream ftpStream = response.GetResponseStream();
                //File.Move()
                ftpStream.Close();
                response.Close();
            }
            catch (Exception ex)
            { }
        }

        #endregion

        #region 移动文件夹
        /// <summary>
        /// 移动文件夹
        /// </summary>
        /// <param name="currentFilename">现有文件名称</param>
        /// <param name="newDirectory">新的文件名称</param>
        /// <param name="FTPUrl">FTPUrl</param>
        /// <param name="FTP_UserName">用户名</param>
        /// <param name="FTP_PWD">密码</param>
        public void MovieFile(string currentFilename, string newDirectory,string FTPUrl, string FTP_UserName, string FTP_PWD)
        {
            ReName(currentFilename, newDirectory, FTPUrl, FTP_UserName, FTP_PWD);
        }
        #endregion

    #region 创建文件夹
        /// <summary>
        /// 创建文件夹
        /// </summary>
        public void MakeDir(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)
            { }
        }
     #endregion

    #region 获取指定文件大小
        /// <summary>
        /// 获取指定文件大小
        /// </summary>
        public long GetFileSize(string filename)
        {
            FtpWebRequest reqFTP;
            long fileSize = 0;
            try
            {
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + filename));
                reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
                reqFTP.UseBinary = true;
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                Stream ftpStream = response.GetResponseStream();
                fileSize = response.ContentLength;
                ftpStream.Close();
                response.Close();
            }
            catch (Exception ex)
            { }
            return fileSize;
        }
    #endregion

至此 SSIS 学习之旅 到这里就结束了。希望对大家的工作有所帮助吧。

时间: 2024-10-12 15:58:26

SSIS 学习之旅 FTP访问类的相关文章

SSIS 学习之旅 序章 和 简介

SSIS 学习之旅目录: 第一章: SSIS 学习之旅 第一个SSIS 示例(一) 第二章: SSIS 学习之旅 第一个SSIS 示例(二) 第三章: SSIS 学习之旅 数据同步 第四章: SSIS 学习之旅 FTP文件传输-FTP任务 第五章: SSIS 学习之旅 FTP文件传输-脚本任务 第六章: SSIS 学习之旅 FTP访问类 SSIS是Microsoft SQL Server Integration Services的简称,是生成高性能数据集成解决方案,是Microsoft BI 解

C#自定义FTP访问类的代码

如下资料是关于C#自定义FTP访问类的代码,应该对各朋友有帮助. using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net;using System.Text.RegularExpressions; namespace DotNet.Utilities{ public class FTPHelper { #region 字段 string ftpURI;

SSIS 学习之旅 第一个SSIS 示例(一)(下)

继上一章咱们继续. 6.创建包变量注意:由于以后文章里的实例全部建立在一个解决方案下,而且 数据库是本地数据库 我使用包变量存放数据库连接串,DB连接管理器 会转换成 项目连接 以后的文章就不详细讲解这一方面了.(大家也可以不使用包变量这种方式根据情况而定); 7.把数据库连接器 连接方式 更改成变量形式 8.创建DB源 注意:在数据访问模式 选择SQL命令的情况下  不能使用临时表当结果表 当出现处理复杂逻辑获取结果的时候 最好使用存储过程 最后结果导入到一张实体表中 9.创建输出的平面文件目

SSIS 学习之旅 数据同步

这一章 别人也有写过但是我觉得还是写写比较好.数据同步其实就是想仿照 数据库的发布订阅功能 设计:   前面两个例子已经分别创建了两个数据库分别是Demon 和 Demon_text    里面分别都有Users 表 以Demon库Users表为主表 像 Demon_text库Users表同步数据   定期处理数据 使得两个库数据一致 创建数据库跟数据中的表的SQL语句 分别在上两章有 这里就不在粘贴过了. 由于这个包 使用的库是上面两章的数据库 为了不重复创建数据库连接管理器 本人将Demon

学习实践:使用模式,原则实现一个C++数据库访问类

一.概述 在我参与的多个项目中,大家使用libMySQL操作MySQL数据库,而且是源码即复用,在多个项目中有多套相同或相似的源码,这样的复用方式给开发带来了不变,而且libMySQL的使用比较麻烦,要应对很多的细节,很容易出错. 我要写一个动态链接库,将对libMySQL的操作封装起来,以二进制复用代替源码级复用:要提供线程安全的接口,用户无需关系是否加锁这样细节性的问题,减少出错及死锁的机会,当然也要允许用户自己选择是否线程安全的访问数据库:要简化访问数据库的流程,接口越简单越好. 我从20

WCF学习之旅—实现支持REST客户端应用(二十四)

WCF学习之旅—实现REST服务(二十二) WCF学习之旅—实现支持REST服务端应用(二十三) 在上二篇文章中简单介绍了一下RestFul与WCF支持RestFul所提供的方法,及创建一个支持REST的WCF服务端程序,本文介绍如何调用上一篇文章介绍的RestFul服务端. 五.Windows客户端调用 为了强调REST的通用性,客户端不用WCF的形式调用服务,而是采用HttpWebResponse通过编程方式直接访问,消息格式我们选XML. 首先,我们使用C#来封装一个RestHelper类

apue和unp的学习之旅09——套接字选项

//-----------------------------------1.getsockopt和setsockopt-------------------------------------- #include <sys/socket.h> int getsockopt(int sockfd, int level, int optname, void* optval, socklen_t* optlen); int setsockopt(int sockfd, int level, int

基于 Android NDK 的学习之旅----- C调用Java

http://www.cnblogs.com/luxiaofeng54/archive/2011/08/17/2142000.html 基于 Android NDK 的学习之旅----- C调用Java许多成熟的C引擎要移植到Android 平台上使用 , 一般都会 提供 一些接口, 让Android sdk 和 jdk 实现. 下文将会介绍 C 如何 通过 JNI 层调用 Java 的静态和非静态方法. 1.主要流程 1.  新建一个测试类TestProvider.java a)       

【转】基于 Android NDK 的学习之旅-----数据传输(引用数据类型)

原文网址:http://www.cnblogs.com/luxiaofeng54/archive/2011/08/20/2147086.html 基于 Android NDK 的学习之旅-----数据传输二(引用数据类型)(附源码) 基于 Android NDK 的学习之旅-----数据传输(引用数据类型) 接着上篇文章继续讲.主要关于引用类型的数据传输,本文将介绍字符串传输和自定义对象的传输. 1.主要流程 1.  String 字符串传输 a)         上层定义一个native的方法