謝大哥 https://www.cnblogs.com/qiren5761/archive/2010/01/22/1654496.html
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Net; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //FTPUploadFile("127.0.0.1/zwx" , "administrator", "123123", "e:\\飯卡記錄清單.xls"); //FTPDownloadFile("127.0.0.1/zwx", "administrator", "123123", "d:", "123.xls", "飯卡記錄清單.xls"); string[] fileList = FTPGetFileList("127.0.0.1/zwx/1", "administrator", "123123"); for (int i = 0; i < fileList.Length; i++) { Console.WriteLine(fileList[i]); } Console.Read(); } #region FTP獲取文件列表 /// <summary> /// FTP獲取文件列表 /// </summary> /// <param name="ftpServerIP"></param> /// <param name="ftpUserID"></param> /// <param name="ftpPassword"></param> /// <returns></returns> private static string[] FTPGetFileList(string ftpServerIP, string ftpUserID, string ftpPassword) { //響應結果 StringBuilder result = new StringBuilder(); //FTP請求 FtpWebRequest ftpRequest = null; //FTP響應 WebResponse ftpResponse = null; //FTP響應流 StreamReader ftpResponsStream = null; try { //生成FTP請求 ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/")); //設置文件傳輸類型 ftpRequest.UseBinary = true; //FTP登錄 ftpRequest.Credentials = new NetworkCredential(ftpUserID, ftpPassword); //設置FTP方法 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("\n"); line = ftpResponsStream.ReadLine(); } //去掉結果列表中最后一個換行 result.Remove(result.ToString().LastIndexOf('\n'), 1); //返回結果 return result.ToString().Split('\n'); } 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> private static void FTPDownloadFile(string ftpServerIP, string ftpUserID, string ftpPassword, string saveFilePath, string saveFileName, string downloadFileName) { //定義FTP請求對象 FtpWebRequest ftpRequest = null; //定義FTP響應對象 FtpWebResponse ftpResponse = null; //存儲流 FileStream saveStream = null; //FTP數據流 Stream ftpStream = null; try { //生成下載文件 saveStream = new FileStream(saveFilePath + "\\" + saveFileName, FileMode.Create); //生成FTP請求對象 ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + downloadFileName)); //設置下載文件方法 ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile; //設置文件傳輸類型 ftpRequest.UseBinary = true; //設置登錄FTP帳號和密碼 ftpRequest.Credentials = new NetworkCredential(ftpUserID, ftpPassword); //生成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="ftpServerIP">FTP服務器IP</param> /// <param name="ftpUserID">FTP登錄帳號</param> /// <param name="ftpPassword">FTP登錄密碼</param> /// <param name="filename">上文件文件名(絕對路徑)</param> private static void FTPUploadFile(string ftpServerIP, string ftpUserID, string ftpPassword, string filename) { //上傳文件 FileInfo uploadFile = null; //上傳文件流 FileStream uploadFileStream = null; //FTP請求對象 FtpWebRequest ftpRequest = null; //FTP流 Stream ftpStream = null; try { //獲取上傳文件 uploadFile = new FileInfo(filename); //創建FtpWebRequest對象 ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + uploadFile.Name)); //FTP登錄 ftpRequest.Credentials = new NetworkCredential(ftpUserID, ftpPassword); // 默認為true,連接不會被關閉 // 在一個命令之后被執行 ftpRequest.KeepAlive = false; //FTP請求執行方法 ftpRequest.Method = WebRequestMethods.Ftp.UploadFile; // 指定數據傳輸類型 ftpRequest.UseBinary = true; // 上傳文件時通知服務器文件的大小 ftpRequest.ContentLength = uploadFile.Length; // 緩沖大小設置為2kb int buffLength = 2048; byte[] buff = new byte[buffLength]; int contentLen; // 打開一個文件流讀上傳的文件 uploadFileStream = uploadFile.OpenRead(); // 把上傳的文件寫入流 ftpStream = ftpRequest.GetRequestStream(); // 每次讀文件流的2kb contentLen = uploadFileStream.Read(buff, 0, buffLength); // 流內容沒有結束 while (contentLen != 0) { // 把內容從file stream 寫入 upload stream ftpStream.Write(buff, 0, contentLen); contentLen = uploadFileStream.Read(buff, 0, buffLength); } } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { if (uploadFileStream != null) { uploadFileStream.Close(); } if (ftpStream != null) { ftpStream.Close(); } } } #endregion } }
