C# FTP操作類
using System; using System.Collections.Generic; using System.Text; using System.Net; using System.IO;namespace Utility { public class FtpUpDown {
string ftpServerIP; string ftpUserID; string ftpPassword; FtpWebRequest reqFTP; private void Connect(String path)//連接ftp { // 根據uri創建FtpWebRequest對象 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path)); // 指定數據傳輸類型 reqFTP.UseBinary = true; // ftp用戶名和密碼 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); } public FtpUpDown(string ftpServerIP, string ftpUserID, string ftpPassword) { this.ftpServerIP = ftpServerIP; this.ftpUserID = ftpUserID; this.ftpPassword = ftpPassword; } //都調用這個 private string[] GetFileList(string path, string WRMethods)//上面的代碼示例了如何從ftp服務器上獲得文件列表 { string[] downloadFiles; StringBuilder result = new StringBuilder(); try { Connect(path); reqFTP.Method = WRMethods; WebResponse response = reqFTP.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);//中文文件名 string line = reader.ReadLine(); while (line != null) { result.Append(line); result.Append("\n"); line = reader.ReadLine(); } // to remove the trailing '\n' result.Remove(result.ToString().LastIndexOf('\n'), 1); reader.Close(); response.Close(); return result.ToString().Split('\n'); } catch (Exception ex) { Log.WriteError("Get FileList Error:" + ex.Message); downloadFiles = null; return downloadFiles; } } public string[] GetFileList(string path)//上面的代碼示例了如何從ftp服務器上獲得文件列表 { return GetFileList("ftp://" + ftpServerIP + "/" + path, WebRequestMethods.Ftp.ListDirectory); } public string[] GetFileList()//上面的代碼示例了如何從ftp服務器上獲得文件列表 { return GetFileList("ftp://" + ftpServerIP + "/", WebRequestMethods.Ftp.ListDirectory); } public void Upload(string filename) //上面的代碼實現了從ftp服務器上載文件的功能 { FileInfo fileInf = new FileInfo(filename); string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name; Connect(uri);//連接 // 默認為true,連接不會被關閉 // 在一個命令之后被執行 reqFTP.KeepAlive = false; // 指定執行什么命令 reqFTP.Method = WebRequestMethods.Ftp.UploadFile; // 上傳文件時通知服務器文件的大小 reqFTP.ContentLength = fileInf.Length; // 緩沖大小設置為kb int buffLength = 2048; byte[] buff = new byte[buffLength]; int contentLen; // 打開一個文件流(System.IO.FileStream) 去讀上傳的文件 FileStream fs = fileInf.OpenRead(); try { // 把上傳的文件寫入流 Stream strm = reqFTP.GetRequestStream(); // 每次讀文件流的kb contentLen = fs.Read(buff, 0, buffLength); // 流內容沒有結束 while (contentLen != 0) { // 把內容從file stream 寫入upload stream strm.Write(buff, 0, contentLen); contentLen = fs.Read(buff, 0, buffLength); } // 關閉兩個流 strm.Close(); fs.Close(); } catch (Exception ex) { Log.WriteError( "Upload Error:" + ex.Message); } } public bool Download(string filePath, string fileName, out string errorinfo)////上面的代碼實現了從ftp服務器下載文件的功能 { try { String onlyFileName = Path.GetFileName(fileName); string newFileName = filePath + "\\" + onlyFileName; if (File.Exists(newFileName)) { errorinfo = string.Format("本地文件{0}已存在,無法下載", newFileName); return false; } string url = "ftp://" + ftpServerIP + "/" + fileName; Connect(url);//連接 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); 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); FileStream outputStream = new FileStream(newFileName, FileMode.Create); while (readCount > 0) { outputStream.Write(buffer, 0, readCount); readCount = ftpStream.Read(buffer, 0, bufferSize); } ftpStream.Close(); outputStream.Close(); response.Close(); errorinfo = ""; return true; } catch (Exception ex) { errorinfo = string.Format("因{0},無法下載", ex.Message); return false; } } //刪除文件 public void DeleteFileName(string fileName) { try { FileInfo fileInf = new FileInfo(fileName); string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name; Connect(uri);//連接 // 默認為true,連接不會被關閉 // 在一個命令之后被執行 reqFTP.KeepAlive = false; // 指定執行什么命令 reqFTP.Method = WebRequestMethods.Ftp.DeleteFile; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); response.Close(); } catch (Exception ex) { Log.WriteError("刪除錯誤:" + ex.Message); } } //創建目錄 public void MakeDir(string dirName) { try { string uri = "ftp://" + ftpServerIP + "/" + dirName; Connect(uri);//連接 reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); response.Close(); } catch (Exception ex) { Log.WriteError("創建目錄錯誤:" + ex.Message); } } //刪除目錄 public void delDir(string dirName) { try { string uri = "ftp://" + ftpServerIP + "/" + dirName; Connect(uri);//連接 reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); response.Close(); } catch (Exception ex) { Log.WriteError("刪除目錄錯誤:" + ex.Message); } } //獲得文件大小 public long GetFileSize(string filename) { long fileSize = 0; try { FileInfo fileInf = new FileInfo(filename); string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name; Connect(uri);//連接 reqFTP.Method = WebRequestMethods.Ftp.GetFileSize; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); fileSize = response.ContentLength; response.Close(); } catch (Exception ex) { Log.WriteError("獲得文件大小錯誤:" + ex.Message); } return fileSize; } //文件改名 public void Rename(string currentFilename, string newFilename) { try { FileInfo fileInf = new FileInfo(currentFilename); string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name; Connect(uri);//連接 reqFTP.Method = WebRequestMethods.Ftp.Rename; reqFTP.RenameTo = newFilename; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); response.Close(); } catch (Exception ex) { Log.WriteError("文件改名錯誤:" + ex.Message); } } //讀取文件 public Stream ReadFile(string fileName) { try { string url = "ftp://" + ftpServerIP + "/" + fileName; Connect(url);//連接 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); Stream ftpStream = response.GetResponseStream(); return ftpStream; } catch (Exception ex) { Log.WriteError("讀取文件錯誤:" + ex.Message); return null; } } //獲得文件明晰 public string[] GetFilesDetailList() { return GetFileList("ftp://" + ftpServerIP + "/", WebRequestMethods.Ftp.ListDirectoryDetails); } //獲得文件明晰 public string[] GetFilesDetailList(string path) { return GetFileList("ftp://" + ftpServerIP + "/" + path, WebRequestMethods.Ftp.ListDirectoryDetails); } // 文件存在檢查 public bool fileCheckExist(string fileName) { bool success = false; FtpWebResponse response = null; StreamReader reader = null; try { string url = "ftp://" + ftpServerIP + "/" + fileName; Connect(url);//連接 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); response = (FtpWebResponse)reqFTP.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; } }
}</pre>
本文由用戶 cymt 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!