SSIS 学习之旅 FTP访问类
这章把脚本任务访问FTP的方法 全部给大家。
控件的使用大家如果有不懂得可以看下我之前的文章。
第一章:SSIS 学习之旅 第一个SSIS 示例(一)(上)
第三章:SSIS 学习之旅 数据同步
#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访问类的更多相关文章
- SSIS 学习之旅 FTP文件传输-脚本任务
这一章主要讲解一下用脚本怎么把CSV文件抛送到FTP服务器上 设计: 通过Demon库的Users表数据生成CSV文件. 生成后的CSV文件抛送到FTP指定目录下. 控件的使用这里就不做详细讲 ...
- SSIS 学习之旅 FTP文件传输-FTP任务
这一章主要讲解一下FTP控件. 设计: 通过Demon库的Users表数据生成CSV文件. 生成后的CSV文件抛送到FTP指定目录下. 其他控件的使用这里就不做详细讲解了.大家如果有不懂得可以 ...
- SSIS 学习之旅 序章 和 简介
SSIS 学习之旅目录: 第一章: SSIS 学习之旅 第一个SSIS 示例(一) 第二章: SSIS 学习之旅 第一个SSIS 示例(二) 第三章: SSIS 学习之旅 数据同步 第四章: SSIS ...
- C#自定义FTP访问类的代码
如下资料是关于C#自定义FTP访问类的代码,应该对各朋友有帮助. using System; using System.Collections.Generic; using System.Text; ...
- SSIS 学习之旅 数据同步
这一章 别人也有写过但是我觉得还是写写比较好.数据同步其实就是想仿照 数据库的发布订阅功能 第一章:SSIS 学习之旅 第一个SSIS 示例(一)(上) 第二章:SSIS 学习之旅 第一个SSIS 示 ...
- 我的Java开发学习之旅------>Java 格式化类(java.util.Formatter)基本用法
本文参考: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html http://www.blogjava.net/ ...
- SSIS 学习之旅 第一个SSIS 示例(二)
这一章还是继上一章例子 进行一些小的知识扩展.主要是为了让大家更快的上手SSIS. 概要设计: 1.按用户组生成CSV文件到Pending目录下, 2.移动Pending目录下的CSV文件 ...
- 我的Java开发学习之旅------>工具类:将播放器的进度值转换成相应的时间格式
在我的博客<我的Java开发学习之旅------>Java 格式化类(java.util.Formatter)基本用法,地址:http://blog.csdn.net/ouyang_pen ...
- 学习实践:使用模式,原则实现一个C++数据库访问类
一.概述 在我参与的多个项目中,大家使用libMySQL操作MySQL数据库,而且是源码即复用,在多个项目中有多套相同或相似的源码,这样的复用方式给开发带来了不变,而且libMySQL的使用比较麻烦, ...
随机推荐
- random函数详解
1. 随机函数 Math.random() Math.random(); 取值范围是 [ 0.0,1.0 ) 的左闭右开区间.具体源代码如下所示: Math.random()是生成0~ ...
- 防止jquery ajax 重复提交
var requestSent = false; jQuery("#buttonID").click(function() { if(!requestSent) { request ...
- bzoj千题计划133:bzoj3130: [Sdoi2013]费用流
http://www.lydsy.com/JudgeOnline/problem.php?id=3130 第一问就是个最大流 第二问: Bob希望总费用尽量大,那肯定是把所有的花费加到流量最大的那一条 ...
- android textview空格占位符以及一些其他占位符汇总
== 普通的英文半角空格 == == == no-break space (普通的英文半角空格但不换行) == 中文全角空格 (一个中文宽度) == == en空格 (半个中文 ...
- div内容超出后自动显示滚动条
一. <div style=" overflow:scroll; width:400px; height:400px;”></div> 记住宽和高一定要设置噢,否则不 ...
- CALayer的上动画的暂停和恢复
CHENYILONG Blog CALayer上动画的暂停和恢复 #pragma mark 暂停CALayer的动画-(void)pauseLayer:(CALayer*)layer{CFTimeIn ...
- 深度优先搜索(DFS)----------------Tju_Oj_3517The longest athletic track
这个题主要考察对树的操作,主要思想是DFS或者BFS,其次是找树的直径方法(既要运用两次BFS/DFS),最后作为小白,还练习了vector的操作. DFS框架伪码: bool DSF(Node on ...
- TC-572-D1L2 未完!待续!
题目描述 • 有一个神秘的常数 K ,s 位• 现在有 n 个 s 位数,告诉你每个数与 K 有多少位是相同的• 判断 K 的无解.多解.唯一解,并求出唯一解(如果存在的话)• 所有出现的数都允许前导 ...
- Scrapy爬虫框架之爬取校花网图片
Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设 ...
- 阿里云CentOS下安装jdk
首先需要下载jdk: 由于oracle上的下载页面有跳转,直接用wget下载下来的只是html页面.可以用下面的命令: wget --no-cookies --no-check-certificate ...