C#使用FtpWebRequest與FtpWebResponse完成FTP操作
更新時間:2022年05月16日 14:36:25 作者:springsnow
這篇文章介紹了C#使用FtpWebRequest與FtpWebResponse完成FTP操作的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
一、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ù)器上的文件檢索日期時間戳的 FTP MDTM 協(xié)議方法。
- Get?File?Size:表示要用于檢索 FTP 服務(wù)器上的文件大小的 FTP SIZE 協(xié)議方法。
- List?Directory:表示獲取 FTP 服務(wù)器上的文件的簡短列表的 FTP NLIST 協(xié)議方法。
- List?Directory?Details:表示獲取 FTP 服務(wù)器上的文件的詳細列表的 FTP LIST 協(xié)議方法。
- Make?Directory:表示在 FTP 服務(wù)器上創(chuàng)建目錄的 FTP MKD 協(xié)議方法。
- Print?Working?Directory:表示打印當前工作目錄的名稱的 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; // 默認為true,連接不會被關(guān)閉, 在一個命令之后被執(zhí)行
reqFTP.Method = WebRequestMethods.Ftp.UploadFile; // 指定執(zhí)行什么命令
reqFTP.UseBinary = true; // 指定數(shù)據(jù)傳輸類型
reqFTP.ContentLength = fileInf.Length; // 上傳文件時通知服務(wù)器文件的大小
int contentLen;
FileStream fileStream = fileInf.OpenRead(); // 打開一個文件讀取內(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)閉兩個流
requestStream.Close();
//uploadResponse = (FtpWebResponse)reqFTP.GetResponse();
fileStream.Close();
}三、下載文件
1、核心代碼
/// <summary>
/// 下載文件
/// </summary>
/// <param name="filePath">本地目錄</param>
/// <param name="fileName">遠程路徑</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.dhdzp.com/article/119779.htm
到此這篇關(guān)于C#使用FtpWebRequest與FtpWebResponse完成FTP操作的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#設(shè)計模式之Builder生成器模式解決帶老婆配置電腦問題實例
這篇文章主要介紹了C#設(shè)計模式之Builder生成器模式解決帶老婆配置電腦問題,簡單介紹了生成器模式的概念、功能并結(jié)合具體實例形式分析了C#生成器模式解決配電腦問題的步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-09-09
C#使用DateTime.Now靜態(tài)屬性動態(tài)獲得系統(tǒng)當前日期和時間
本文主要介紹了C#使用DateTime.Now靜態(tài)屬性動態(tài)獲得系統(tǒng)當前日期和時間,DateTime結(jié)構(gòu)的Now靜態(tài)屬性只是得到一個系統(tǒng)時間對象,該時間對象不會隨著系統(tǒng)時間的變化而變化,如果要動態(tài)顯示系統(tǒng)時間,可以使用計時器間隔地獲取系統(tǒng)時間對象并顯示,感興趣的可以了解一下2024-01-01
12306奇葩驗證碼引發(fā)思考之C#實現(xiàn)驗證碼程序
春運最高峰來了!明天通過網(wǎng)絡(luò)將能買到小年夜的車票,本周四就將開售除夕日車票,但不少人被首次在春運期間使用的圖片驗證碼搞得很火大,小編也正在對驗證碼進行研究,編寫了由C#實現(xiàn)驗證碼程序,分享給大家2015-12-12
C#連接Oracle數(shù)據(jù)庫的多種方法總結(jié)
最近小項目當中要使用C#來連接Oracle數(shù)據(jù)庫來完成系統(tǒng)的操作,這篇文章主要給大家介紹了關(guān)于C#連接Oracle數(shù)據(jù)庫的多種方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-04-04
C#短時間內(nèi)產(chǎn)生大量不重復的隨機數(shù)
在C#編程中,經(jīng)常會碰到產(chǎn)生隨機數(shù)的情況,并且是在短時間內(nèi)產(chǎn)生一組隨機數(shù)。如果這組隨機數(shù)中有大量重復的,則達不到我們的要求2013-02-02

