C#使用FtpWebRequest與FtpWebResponse完成FTP操作
更新時(shí)間:2022年05月16日 14:36:25 作者:springsnow
這篇文章介紹了C#使用FtpWebRequest與FtpWebResponse完成FTP操作的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
一、WebRequestMethods.Ftp類:
表示可與 FTP 請求一起使用的 FTP 協(xié)議方法的類型。
- Append?File:表示要用于將文件追加到 FTP 服務(wù)器上的現(xiàn)有文件的 FTP APPE 協(xié)議方法。
- Delete?File:表示要用于刪除 FTP 服務(wù)器上的文件的 FTP DELE 協(xié)議方法。
- Download?File:表示要用于從 FTP 服務(wù)器下載文件的 FTP RETR 協(xié)議方法。
- Get?Date?Timestamp:表示要用于從 FTP 服務(wù)器上的文件檢索日期時(shí)間戳的 FTP MDTM 協(xié)議方法。
- Get?File?Size:表示要用于檢索 FTP 服務(wù)器上的文件大小的 FTP SIZE 協(xié)議方法。
- List?Directory:表示獲取 FTP 服務(wù)器上的文件的簡短列表的 FTP NLIST 協(xié)議方法。
- List?Directory?Details:表示獲取 FTP 服務(wù)器上的文件的詳細(xì)列表的 FTP LIST 協(xié)議方法。
- Make?Directory:表示在 FTP 服務(wù)器上創(chuàng)建目錄的 FTP MKD 協(xié)議方法。
- Print?Working?Directory:表示打印當(dāng)前工作目錄的名稱的 FTP PWD 協(xié)議方法。
- Remove?Directory:表示移除目錄的 FTP RMD 協(xié)議方法。
- Rename:表示重命名目錄的 FTP RENAME 協(xié)議方法。
- Upload?File:表示將文件上載到 FTP 服務(wù)器的 FTP STOR 協(xié)議方法。
- Upload?File?With?Unique?Name:表示將具有唯一名稱的文件上載到 FTP 服務(wù)器的 FTP STOU 協(xié)議方法。
二、上傳文件:
OpenFileDialog opFilDlg = new OpenFileDialog(); if (opFilDlg.ShowDialog() == DialogResult.OK) { ftp = new YBBFTPClass("hz.a.cn", "", "csp", "welcome", 0); ftp.UploadFile(opFilDlg.FileName); MessageBox.Show("上傳成功"); }
/// <summary> /// 文件上傳 /// </summary> /// <param name="filename">本地文件路徑</param> public void UploadFile(string filename) { FileInfo fileInf = new FileInfo(filename); string uri = "ftp://" + RemoteHost + "/" + fileInf.Name; FtpWebRequest reqFTP; reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + RemoteHost + "/" + fileInf.Name));// 根據(jù)uri創(chuàng)建FtpWebRequest對象 reqFTP.Credentials = new NetworkCredential(RemoteUser, RemotePass); // ftp用戶名和密碼 reqFTP.KeepAlive = false; // 默認(rèn)為true,連接不會被關(guān)閉, 在一個(gè)命令之后被執(zhí)行 reqFTP.Method = WebRequestMethods.Ftp.UploadFile; // 指定執(zhí)行什么命令 reqFTP.UseBinary = true; // 指定數(shù)據(jù)傳輸類型 reqFTP.ContentLength = fileInf.Length; // 上傳文件時(shí)通知服務(wù)器文件的大小 int contentLen; FileStream fileStream = fileInf.OpenRead(); // 打開一個(gè)文件讀取內(nèi)容到fileStream中 contentLen = fileStream.Read(buffer, 0, buffer.Length); ;//從fileStream讀取數(shù)據(jù)到buffer中 Stream requestStream = reqFTP.GetRequestStream(); // 流內(nèi)容沒有結(jié)束 while (contentLen != 0) { requestStream.Write(buffer, 0, contentLen);// 把內(nèi)容從buffer 寫入 requestStream中,完成上傳。 contentLen = fileStream.Read(buffer, 0, buffer.Length); } // 關(guān)閉兩個(gè)流 requestStream.Close(); //uploadResponse = (FtpWebResponse)reqFTP.GetResponse(); fileStream.Close(); }
三、下載文件
1、核心代碼
/// <summary> /// 下載文件 /// </summary> /// <param name="filePath">本地目錄</param> /// <param name="fileName">遠(yuǎn)程路徑</param> public void DownloadFile(string filePath, string fileName) { FtpWebRequest reqFTP; try { FileStream fileStream = new FileStream(filePath + "\\" + fileName, FileMode.Create); reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + RemoteHost + "/" + fileName)); reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; reqFTP.UseBinary = true; reqFTP.Credentials = new NetworkCredential(RemoteUser, RemotePass); FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); Stream responseStream = response.GetResponseStream();//從ftp響應(yīng)中獲得響應(yīng)流 //long cl = response.ContentLength; byte[] buffer = new byte[1024]; int readCount; readCount = responseStream.Read(buffer, 0, buffer.Length);//從ftp的responseStream讀取數(shù)據(jù)到buffer中 while (readCount > 0) { fileStream.Write(buffer, 0, readCount);//從buffer讀取數(shù)據(jù)到fileStream中,完成下載 readCount = responseStream.Read(buffer, 0, buffer.Length); } responseStream.Close(); fileStream.Close(); response.Close(); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
2、winform:
FolderBrowserDialog fldDlg = new FolderBrowserDialog(); if (txtUpload.Text.Trim().Length > 0) { if (fldDlg.ShowDialog() == DialogResult.OK) { ftp.DownloadFile(fldDlg.SelectedPath, txtUpload.Text.Trim()); MessageBox.Show("下載成功"); } } else { MessageBox.Show("Please enter the File name to download"); }
3、webform彈出下載提示:
FtpClient _client = new FtpClient(); Stream stream = _client.OpenRead(FtpFilePath, FtpDataType.Binary); string FtpFilePath = Request.QueryString["FilePath"]; string _fname = Path.GetFileName(FtpFilePath); Response.ContentType = "application/" + _fname.Split('.')[1]; Response.AddHeader("Content-disposition", "attachment; filename=" + _fname); byte[] buffer = new byte[10240]; int readCount; do { readCount = stream.Read(buffer, 0, buffer.Length); Response.OutputStream.Write(buffer, 0, readCount);//持續(xù)寫入流 } while (readCount != 0); Response.OutputStream.Write(buffer, 0, buffer.Length); Response.End();
四、刪除文件
string uri = "ftp://" + RemoteHost + "/" + fileName; FtpWebRequest reqFTP; reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + RemoteHost + "/" + fileName)); reqFTP.Credentials = new NetworkCredential(RemoteUser, RemotePass); reqFTP.KeepAlive = false; reqFTP.Method = WebRequestMethods.Ftp.DeleteFile; 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();
完整代碼參考:
http://www.dbjr.com.cn/article/119779.htm
到此這篇關(guān)于C#使用FtpWebRequest與FtpWebResponse完成FTP操作的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#實(shí)現(xiàn)Excel導(dǎo)入sqlite的方法
這篇文章主要介紹了C#實(shí)現(xiàn)Excel導(dǎo)入sqlite的方法,是C#程序設(shè)計(jì)中非常重要的一個(gè)實(shí)用技巧,需要的朋友可以參考下2014-09-09C#中緩存System.Web.Caching用法總結(jié)
本文詳細(xì)講解了C#中緩存System.Web.Caching的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04Unity?百度AI實(shí)現(xiàn)Logo商標(biāo)識別
本文主要介紹了Unity實(shí)現(xiàn)檢測和識別圖片中的品牌LOGO信息。即對于輸入的一張圖片(可正常解碼,且長寬比適宜),輸出圖片中LOGO的名稱、位置和置信度。需要的可以參考一下2022-01-01