1. 程式人生 > >C# FTP釋出檔案/資料夾至伺服器(增刪改查)

C# FTP釋出檔案/資料夾至伺服器(增刪改查)

C#使用FTP釋出檔案或資料夾
一、選擇一個已有的ftp站點,要求已知登入資訊。如果沒有,則本地新增ftp站點,具體新增ftp站點的教程如下,百度上有很多類似教程:

https://jingyan.baidu.com/article/dca1fa6f479469f1a4405292.html

二、選擇正確的FTP操作庫。可選擇系統自帶的FTP庫,或者其他庫如(推薦用FluentFTP,Nuget裡可以下載到)

FluentFTP:  https://www.nuget.org/packages/FluentFTP

三、具體程式碼


        //用於驗證登入資訊是否正確
        private
bool validateLogin() { try { var Ip = tbxIp.Text; var User = tbxUser.Text; var Psw = tbxPwb.Password; var uriStr = $"ftp://{Ip}"; var request = FtpWebRequest.Create(new Uri(_ftpPath)); request.Credentials = new
NetworkCredential(_user, _password); request.Method = WebRequestMethods.Ftp.ListDirectory; var response = request.GetResponse(); response.Close(); request.Abort(); return true; } catch (Exception ex) { //沒有登入上
} return false; } //獲取指定伺服器路徑下的檔案/資料夾路徑,此處的path應該是ftp://xxx.xxx.xxx.xx/ABC/DEF的資料夾路徑 private List<string> GetFolders(string path) { var lstFolders = new List<string>(); try { var ftpGetFolders = (FtpWebRequest)WebRequest.Create(new Uri(path)); ftpGetFolders.Credentials = new NetworkCredential(_user, _password); ftpGetFolders.Method = WebRequestMethods.Ftp.ListDirectoryDetails;//所有的檔案列表,包括檔案和資料夾 var response = ftpGetFolders.GetResponse(); var sReader = new StreamReader(response.GetResponseStream());//獲取返回的位元組流並解析 string line = sReader.ReadLine(); while (line != null) { if (line.Contains("<DIR>"))//所有的資料夾都有這個標誌,但檔案也有可能有這個命名,還是比較蛋疼的 { string msg = line.Substring(line.LastIndexOf("<DIR>") + 5).Trim(); lstFolders.Add(msg); } line = sReader.ReadLine(); } sReader.Close(); response.Close(); ftpGetFolders.Abort(); } catch (Exception ex) { //ignore } return lstFolders; } //建立ftp資料夾,ftpFolderpath為以ftp://開頭的資料夾完整路徑 private bool CreateFolder(string ftpFolderpath) { try { var ftpMakeFolder = (FtpWebRequest)WebRequest.Create(new Uri(ftpFolderpath)); ftpMakeFolder.Credentials = new NetworkCredential(_user, _password); ftpMakeFolder.Method = WebRequestMethods.Ftp.MakeDirectory; var response = ftpMakeFolder.GetResponse(); response.Close(); ftpMakeFolder.Abort(); return true; } catch (Exception) {//ignore } return false; } //釋出檔案,FilePath為本地的檔案路徑 private bool PublishFile(string FilePath) { try { var newPath = @"ftp://" + Ip + Loc + $"/{Path.GetFileName(FilePath)}";//釋出的具體路徑,詳細到檔名 FtpWebRequest FTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(newPath)); FTP.Method = WebRequestMethods.Ftp.UploadFile;//選擇上傳檔案方法 FTP.Credentials = new NetworkCredential(User, Psw); var fs = new FileStream(FilePath, FileMode.Open); int buffLength = 2048; byte[] buff = new byte[buffLength]; int contentLen = 0; var strm = FTP.GetRequestStream(); WaitHelper.StartWaiting(); contentLen = fs.Read(buff, 0, buffLength); while (contentLen != 0) { strm.Write(buff, 0, contentLen); contentLen = fs.Read(buff, 0, buffLength); } strm.Close(); fs.Close(); WaitHelper.CloseWaiting(); FTP.Abort(); return true; } catch (Exception ex) { ControlUtility.ShowWarningMsgbox($"上傳失敗"); return false; } }

本文給出的只是一個基本操作,並沒有做細節上的處理。FTP類中還有許多其他的方法有待學習。