这章把脚本任务访问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 学习之旅 到这里就结束了。希望对大家的工作有所帮助吧。