public class FtpManager { /// <summary> /// 主机名 /// </summary> string ftpServerIP; /// <summary> /// 登录名 /// </summary> string ftpUserID; /// <summary> /// 登录密码 /// </summary> string ftpPassword; FtpWebRequest ftpRequest; public FtpManager(string ftpServerIP, string ftpUserID, string ftpPassword) { this.ftpServerIP = ftpServerIP; this.ftpUserID = ftpUserID; this.ftpPassword = ftpPassword; } #region 连接ftp /// <summary> /// 连接ftp /// </summary> /// <param name="path"></param> public void Connect(String path) { // 根据uri创建FtpWebRequest对象 ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "//" + path)); //设置文件传输类型 ftpRequest.UseBinary = true; //设置登录FTP帐号和密码 ftpRequest.Credentials = new NetworkCredential(ftpUserID, ftpPassword); } #endregion #region FTP获取文件列表 /// <summary> /// FTP获取文件列表 /// </summary> /// <param name="ftpServerIP"></param> /// <param name="ftpUserID"></param> /// <param name="ftpPassword"></param> /// <returns></returns> public string[] FTPGetFileList(string filePath) { //响应结果 StringBuilder result = new StringBuilder(); //FTP响应 WebResponse ftpResponse = null; //FTP响应流 StreamReader ftpResponsStream = null; try { Connect(filePath); ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory; //生成FTP响应 ftpResponse = ftpRequest.GetResponse(); //FTP响应流 ftpResponsStream = new StreamReader(ftpResponse.GetResponseStream()); string line = ftpResponsStream.ReadLine(); while (line != null) { result.Append(line); result.Append(" "); line = ftpResponsStream.ReadLine(); } //去掉结果列表中最后一个换行 result.Remove(result.ToString().LastIndexOf(' '), 1); //返回结果 return result.ToString().Split(' '); } catch (Exception ex) { Console.WriteLine(ex.Message); return (null); } finally { if (ftpResponsStream != null) { ftpResponsStream.Close(); } if (ftpResponse != null) { ftpResponse.Close(); } } } #endregion #region FTP下载文件 /// <summary> /// FTP下载文件 /// </summary> /// <param name="ftpServerIP">FTP服务器IP</param> /// <param name="ftpUserID">FTP登录帐号</param> /// <param name="ftpPassword">FTP登录密码</param> /// <param name="saveFilePath">保存文件路径</param> /// <param name="saveFileName">保存文件名</param> /// <param name="downloadFileName">下载文件名</param> public void FTPDownloadFile(string path, string saveFileName, string downloadFileName) { //定义FTP响应对象 FtpWebResponse ftpResponse = null; //存储流 FileStream saveStream = null; //FTP数据流 Stream ftpStream = null; try { Connect(downloadFileName); //生成下载文件 saveStream = new FileStream(path + "\" + saveFileName, FileMode.Create); //设置下载文件方法 ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile; //生成FTP响应对象 ftpResponse = (FtpWebResponse)ftpRequest.GetResponse(); //获取FTP响应流对象 ftpStream = ftpResponse.GetResponseStream(); //响应数据长度 long cl = ftpResponse.ContentLength; int bufferSize = 2048; int readCount; byte[] buffer = new byte[bufferSize]; //接收FTP文件流 readCount = ftpStream.Read(buffer, 0, bufferSize); while (readCount > 0) { saveStream.Write(buffer, 0, readCount); readCount = ftpStream.Read(buffer, 0, bufferSize); } } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { if (ftpStream != null) { ftpStream.Close(); } if (saveStream != null) { saveStream.Close(); } if (ftpResponse != null) { ftpResponse.Close(); } } } #endregion #region 从ftp服务器上获得文件列表 /// <summary> /// 从ftp服务器上获得文件列表 /// </summary> /// <param name="path"></param> /// <returns></returns> public string[] GetFileList(string path) { return FTPGetFileList(path); } #endregion #region 文件存在检查 /// <summary> /// 文件存在检查 /// </summary> /// <param name="fileName"></param> /// <returns></returns> public bool fileCheckExist(string fileName) { bool success = false; FtpWebResponse response = null; StreamReader reader = null; try { Connect(fileName); response = (FtpWebResponse)ftpRequest.GetResponse(); reader = new StreamReader(response.GetResponseStream()); string line = reader.ReadLine(); if (line != null) { success = true; } } catch (Exception) { success = false; } finally { if (reader != null) { reader.Close(); } if (response != null) { response.Close(); } } return success; } #endregion #region 获取文件大小 /// <summary> /// 获取文件大小 /// </summary> /// <param name="filename"></param> /// <returns></returns> public long GetFileSize(string filepath) { long fileSize = 0; try { Connect(filepath);//连接 ftpRequest.Method = WebRequestMethods.Ftp.GetFileSize; FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse(); fileSize = response.ContentLength; response.Close(); } catch (Exception ex) { throw ex; } return fileSize; } #endregion }
调用方法:
FtpManager client = new FtpManager("192.168.1.101", "wangjun01", "qwer1234");
string parentUrl = "B";
client.FTPDownloadFile("D:", fileList[i], parentUrl);
//string[] fileList = client.FTPGetFileList(parentUrl);
//for (int i = 0; i < fileList.Length; i++)
//{
// client.FTPDownloadFile("D:", fileList[i], parentUrl);
//}