这章把脚本任务访问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 = ;
byte[] buff = new byte[buffLength];
int contentLen;
FileStream fs = fileInf.OpenRead();
try
{
Stream strm = reqFTP.GetRequestStream();
contentLen = fs.Read(buff, , buffLength);
while (contentLen != )
{
strm.Write(buff, , contentLen);
contentLen = fs.Read(buff, , 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 = ;
int readCount;
byte[] buffer = new byte[bufferSize];
readCount = ftpStream.Read(buffer, , bufferSize);
while (readCount > )
{
outputStream.Write(buffer, , readCount);
readCount = ftpStream.Read(buffer, , 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>") == -)
{
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 = ;
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 学习之旅 到这里就结束了。希望对大家的工作有所帮助吧。

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

  1. SSIS 学习之旅 FTP文件传输-脚本任务

    这一章主要讲解一下用脚本怎么把CSV文件抛送到FTP服务器上 设计:   通过Demon库的Users表数据生成CSV文件.   生成后的CSV文件抛送到FTP指定目录下. 控件的使用这里就不做详细讲 ...

  2. SSIS 学习之旅 FTP文件传输-FTP任务

    这一章主要讲解一下FTP控件. 设计:   通过Demon库的Users表数据生成CSV文件.   生成后的CSV文件抛送到FTP指定目录下. 其他控件的使用这里就不做详细讲解了.大家如果有不懂得可以 ...

  3. SSIS 学习之旅 序章 和 简介

    SSIS 学习之旅目录: 第一章: SSIS 学习之旅 第一个SSIS 示例(一) 第二章: SSIS 学习之旅 第一个SSIS 示例(二) 第三章: SSIS 学习之旅 数据同步 第四章: SSIS ...

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

    如下资料是关于C#自定义FTP访问类的代码,应该对各朋友有帮助. using System; using System.Collections.Generic; using System.Text; ...

  5. SSIS 学习之旅 数据同步

    这一章 别人也有写过但是我觉得还是写写比较好.数据同步其实就是想仿照 数据库的发布订阅功能 第一章:SSIS 学习之旅 第一个SSIS 示例(一)(上) 第二章:SSIS 学习之旅 第一个SSIS 示 ...

  6. 我的Java开发学习之旅------>Java 格式化类(java.util.Formatter)基本用法

    本文参考: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html http://www.blogjava.net/ ...

  7. SSIS 学习之旅 第一个SSIS 示例(二)

    这一章还是继上一章例子 进行一些小的知识扩展.主要是为了让大家更快的上手SSIS. 概要设计:    1.按用户组生成CSV文件到Pending目录下,    2.移动Pending目录下的CSV文件 ...

  8. 我的Java开发学习之旅------>工具类:将播放器的进度值转换成相应的时间格式

    在我的博客<我的Java开发学习之旅------>Java 格式化类(java.util.Formatter)基本用法,地址:http://blog.csdn.net/ouyang_pen ...

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

    一.概述 在我参与的多个项目中,大家使用libMySQL操作MySQL数据库,而且是源码即复用,在多个项目中有多套相同或相似的源码,这样的复用方式给开发带来了不变,而且libMySQL的使用比较麻烦, ...

随机推荐

  1. 实验四:终极改造之使用EF

    回顾一下我们前面经过改造后的程序代码: (1)Listing.aspx:负责将Product对象集合(产品集合)按要求显示出来 (2)Repository.cs:负责读将数据库中读到的数据转换成Pro ...

  2. C++中基于成员函数是否是const重载成员函数

    C++pimer中文版第四版 378页 基于const的重载 如果我们要在一个类的成员函数中定义两个函数签名完全一样的成员函数,比如display,那么可以基于是否是const成员函数来重载.比如: ...

  3. Nginx+Tomcat+Memcache实现负载均衡及Session共享

    第一部分 环境介绍 部署环境: Host1:Nginx.Memcached.Tomcat1 Host2:Tomcat2 Tomcat_version:8.0.38 第二部分 Nginx+Tomcat实 ...

  4. Window10+Python3.5安装opencv

    Window10+Python3.5安装opencv 标签: opencvpython 2017-05-14 16:47 2201人阅读 评论(0) 收藏 举报  分类: Python编程(41)  ...

  5. 编译的java工程压缩上传到linux服务器上后,中文的类名显示乱码

    首先声明,类名是用中文命名的,这个别人写的,不允许修改. 本地用7zip软件压缩成zip包,传到服务器解压,发现中文的class文件名称是乱码. 解决办法: 方法一:使用jar命令打成jar包,传到服 ...

  6. tomcat 性能检测

    一.jconsole 1.tomcat在windows上,start方式启动 在catalina.bat 文件中的:doRun和:doStart下添加以下代码 (没有换行) set JAVA_OPTS ...

  7. 安装python包时遇到"error: Microsoft Visual C++ 9.0 is required"的简答

    简答 在Windows下用pip安装Scrapy报如下错误, error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall ...

  8. idea 永久注册

    1.在百度输入http://idea.lanyus.com/  2.点击这个网址http://idea.lanyus.com/jar/JetbrainsCrack-3.1-release-enc.ja ...

  9. 设置view controller到iPhone或者iPad模式

    在写iOS程序时,view controller的显示大小以及控件大小的调节是在是一个费力的事,尤其是对于用mac本的童鞋,更难驾驭,这时我们可以根据需要设置专门针对iphone或者ipad的view ...

  10. fvwm:还是觉得你最好

    2008-07-12的老日志 用了gnome和xfce,还是有些厌了,摆弄了两天fvwm,发现虽然配置起来有点麻烦,但用起来还是它最贴心,而且占资源极少,系统使用过程中内存一直只用了五六十兆.我的鼠标 ...