【C#】FTPHelper-封裝FTP的相關(guān)操作
當前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
using System; using System.IO; using System.Net; using System.Text;
namespace
Whir.Software.DataSyncTools.Library.Helper { /// <summary> ///
Ftp輔助類 /// </summary> public class FtpHelper { private const int BufferSize = 2048; private readonly string _host; private readonly string _pass; private readonly string _user; private FtpWebRequest _ftpRequest; private FtpWebResponse _ftpResponse; private Stream _ftpStream;
public FtpHelper(string hostIp, string
userName, string password) { _host = hostIp; _user = userName; _pass = password; }
/// <summary> ///
下載文件 /// </summary> /// <param
name="localFile"></param> /// <param
name="remoteFile"></param> /// <returns></returns> public FtpResult Download(string
localFile, string remoteFile) { FtpResult result; try { _ftpRequest =
(FtpWebRequest)WebRequest.Create(_host + "/" + remoteFile); _ftpRequest.Credentials = new
NetworkCredential(_user, _pass); _ftpRequest.UseBinary = true; _ftpRequest.UsePassive = true; _ftpRequest.KeepAlive = true; _ftpRequest.Method =
WebRequestMethods.Ftp.DownloadFile; _ftpResponse =
(FtpWebResponse)_ftpRequest.GetResponse(); _ftpStream = _ftpResponse.GetResponseStream(); var localFileStream = new
FileStream(localFile, FileMode.Create); var byteBuffer = new
byte[BufferSize]; if (_ftpStream != null) { int bytesRead =
_ftpStream.Read(byteBuffer, 0, BufferSize); try { while (bytesRead >
0) {
localFileStream.Write(byteBuffer, 0, bytesRead); bytesRead =
_ftpStream.Read(byteBuffer, 0, BufferSize); } } catch (Exception ex) { result = new
FtpResult(false, ex.Message); return result; } } localFileStream.Close(); if (_ftpStream != null)
_ftpStream.Close(); _ftpResponse.Close(); _ftpRequest = null; result = new FtpResult(true,
"ok"); } catch (Exception ex) { result = new FtpResult(false,
ex.Message); } return result; }
/// <summary> ///
上傳文件 /// </summary> /// <param
name="localFile"></param> /// <param
name="remoteFile"></param> /// <returns></returns> public FtpResult Upload(string
localFile, string remoteFile) { FtpResult result; try { _ftpRequest =
(FtpWebRequest)WebRequest.Create(_host + "/" + remoteFile); _ftpRequest.Credentials = new
NetworkCredential(_user, _pass); _ftpRequest.UseBinary = true; _ftpRequest.UsePassive = true; _ftpRequest.KeepAlive = true; _ftpRequest.Method =
WebRequestMethods.Ftp.UploadFile; _ftpStream =
_ftpRequest.GetRequestStream(); var localFileStream = new
FileStream(localFile, FileMode.Create); var byteBuffer = new
byte[BufferSize]; int bytesSent =
localFileStream.Read(byteBuffer, 0, BufferSize); try { while (bytesSent != 0) {
_ftpStream.Write(byteBuffer, 0, bytesSent); bytesSent =
localFileStream.Read(byteBuffer, 0, BufferSize); } } catch (Exception ex) { result = new
FtpResult(false, ex.Message); return result; } localFileStream.Close(); _ftpStream.Close(); _ftpRequest = null; result = new FtpResult(true,
"ok"); } catch (Exception ex) { result = new FtpResult(false,
ex.Message); } return result; }
/// <summary> ///
刪除文件 /// </summary> /// <param
name="deleteFile"></param> public FtpResult Delete(string
deleteFile) { FtpResult result; try { _ftpRequest =
(FtpWebRequest)WebRequest.Create(_host + "/" + deleteFile); _ftpRequest.Credentials = new
NetworkCredential(_user, _pass); _ftpRequest.UseBinary = true; _ftpRequest.UsePassive = true; _ftpRequest.KeepAlive = true; _ftpRequest.Method =
WebRequestMethods.Ftp.DeleteFile; _ftpResponse =
(FtpWebResponse)_ftpRequest.GetResponse(); _ftpResponse.Close(); _ftpRequest = null; result = new FtpResult(true,
"ok"); } catch (Exception ex) { result = new FtpResult(false,
ex.Message); } return result; }
/// <summary> ///
文件重命名 /// </summary> /// <param
name="currentFileNameAndPath"></param> /// <param
name="newFileName"></param> /// <returns></returns> public FtpResult Rename(string
currentFileNameAndPath, string newFileName) { FtpResult result; try { _ftpRequest =
(FtpWebRequest)WebRequest.Create(_host + "/" +
currentFileNameAndPath); _ftpRequest.Credentials = new
NetworkCredential(_user, _pass); _ftpRequest.UseBinary = true; _ftpRequest.UsePassive = true; _ftpRequest.KeepAlive = true; _ftpRequest.Method =
WebRequestMethods.Ftp.Rename; _ftpRequest.RenameTo =
newFileName; _ftpResponse =
(FtpWebResponse)_ftpRequest.GetResponse(); _ftpResponse.Close(); _ftpRequest = null; result = new FtpResult(true,
"ok"); } catch (Exception ex) { result = new FtpResult(false, ex.Message); } return result; }
/// <summary> ///
創(chuàng)建目錄 /// </summary> /// <param
name="newDirectory"></param> /// <returns></returns> public FtpResult CreateDirectory(string
newDirectory) { FtpResult result; try { _ftpRequest =
(FtpWebRequest)WebRequest.Create(_host + "/" + newDirectory); _ftpRequest.Credentials = new
NetworkCredential(_user, _pass); _ftpRequest.UseBinary = true; _ftpRequest.UsePassive = true; _ftpRequest.KeepAlive = true; _ftpRequest.Method =
WebRequestMethods.Ftp.MakeDirectory; _ftpResponse =
(FtpWebResponse)_ftpRequest.GetResponse(); _ftpResponse.Close(); _ftpRequest = null; result = new FtpResult(true,
"ok"); } catch (Exception ex) {
result = new FtpResult(false, ex.Message); } return result; }
/// <summary> ///
取得文件創(chuàng)建時間 /// </summary> /// <param
name="fileName"></param> /// <returns></returns> public FtpResult
GetFileCreatedDateTime(string fileName) { FtpResult result; try { _ftpRequest =
(FtpWebRequest)WebRequest.Create(_host + "/" + fileName); _ftpRequest.Credentials = new
NetworkCredential(_user, _pass); _ftpRequest.UseBinary = true; _ftpRequest.UsePassive = true; _ftpRequest.KeepAlive = true; _ftpRequest.Method =
WebRequestMethods.Ftp.GetDateTimestamp; _ftpResponse =
(FtpWebResponse)_ftpRequest.GetResponse(); _ftpStream =
_ftpResponse.GetResponseStream(); if (_ftpStream != null) { var ftpReader = new
StreamReader(_ftpStream); string fileInfo; try { fileInfo =
ftpReader.ReadToEnd(); } catch (Exception ex) { result = new
FtpResult(false, ex.Message); ftpReader.Close(); if (_ftpStream != null)
_ftpStream.Close(); _ftpResponse.Close(); _ftpRequest = null; return result; } ftpReader.Close(); if (_ftpStream != null)
_ftpStream.Close(); _ftpResponse.Close(); _ftpRequest = null; return new FtpResult(true,
fileInfo); } return new FtpResult(false,
"響應(yīng)流為空"); } catch (Exception ex) { result = new FtpResult(false,
ex.Message); } return result; }
/// <summary> ///
取得文件大小 /// </summary> /// <param
name="fileName"></param> /// <returns></returns> public FtpResult GetFileSize(string
fileName) { FtpResult result; try { _ftpRequest =
(FtpWebRequest)WebRequest.Create(_host + "/" + fileName); _ftpRequest.Credentials = new
NetworkCredential(_user, _pass); _ftpRequest.UseBinary = true; _ftpRequest.UsePassive = true; _ftpRequest.KeepAlive = true; _ftpRequest.Method =
WebRequestMethods.Ftp.GetFileSize; _ftpResponse =
(FtpWebResponse)_ftpRequest.GetResponse(); _ftpStream =
_ftpResponse.GetResponseStream(); if (_ftpStream != null) { var ftpReader = new
StreamReader(_ftpStream); string fileInfo = null; try { while (ftpReader.Peek()
!= -1) { fileInfo =
ftpReader.ReadToEnd(); } } catch (Exception ex) { result = new
FtpResult(false, ex.Message); ftpReader.Close(); if (_ftpStream != null)
_ftpStream.Close(); _ftpResponse.Close(); _ftpRequest = null; return result; } ftpReader.Close(); _ftpStream.Close(); _ftpResponse.Close(); _ftpRequest = null; return new FtpResult(true,
fileInfo); } result = new FtpResult(false,
"響應(yīng)流為空"); } catch (Exception ex) { result = new FtpResult(false,
ex.Message); } return result; }
/// <summary> ///
顯示遠程目錄結(jié)構(gòu) /// </summary> /// <param
name="directory"></param> /// <returns></returns> public string[]
DirectoryListSimple(string directory) { try { _ftpRequest =
(FtpWebRequest)WebRequest.Create(_host + "/" + directory); _ftpRequest.Credentials = new
NetworkCredential(_user, _pass); _ftpRequest.UseBinary = true; _ftpRequest.UsePassive = true; _ftpRequest.KeepAlive = true; _ftpRequest.Method =
WebRequestMethods.Ftp.ListDirectory; _ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse(); _ftpStream =
_ftpResponse.GetResponseStream(); if (_ftpStream != null) { var ftpReader = new
StreamReader(_ftpStream); string directoryRaw = null; try { while (ftpReader.Peek()
!= -1) { directoryRaw +=
ftpReader.ReadLine() + "|"; } } catch (Exception ex) {
Console.WriteLine(ex.ToString()); } ftpReader.Close(); _ftpStream.Close(); _ftpResponse.Close(); _ftpRequest = null; /* Return the Directory
Listing as a string Array by Parsing 'directoryRaw' with the Delimiter you
Append (I use | in This Example) */ try { if (directoryRaw !=
null) { string[]
directoryList = directoryRaw.Split("|".ToCharArray()); return
directoryList; } } catch (Exception ex) {
Console.WriteLine(ex.ToString()); } } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } return new[] { "" }; }
/// <summary> ///
遠程文件列表 /// </summary> /// <param
name="directory"></param> /// <returns></returns> public string[]
DirectoryListDetailed(string directory) { try { _ftpRequest =
(FtpWebRequest)WebRequest.Create(_host + "/" + directory); _ftpRequest.Credentials = new
NetworkCredential(_user, _pass); _ftpRequest.UseBinary = true; _ftpRequest.UsePassive = true; _ftpRequest.KeepAlive = true; _ftpRequest.Method =
WebRequestMethods.Ftp.ListDirectoryDetails; _ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse(); _ftpStream =
_ftpResponse.GetResponseStream(); if (_ftpStream != null) { var ftpReader = new
StreamReader(_ftpStream); string directoryRaw = null; try { while (ftpReader.Peek()
!= -1) { directoryRaw +=
ftpReader.ReadLine() + "|"; } } catch (Exception ex) {
Console.WriteLine(ex.ToString()); } ftpReader.Close(); _ftpStream.Close(); _ftpResponse.Close(); _ftpRequest = null; try { if (directoryRaw !=
null) { string[]
directoryList = directoryRaw.Split("|".ToCharArray()); return
directoryList; } } catch (Exception ex) {
Console.WriteLine(ex.ToString()); } } } catch (Exception ex) {
Console.WriteLine(ex.ToString()); } /* Return an Empty string Array if
an Exception Occurs */ return new[] { "" }; } }
public class FtpResult { public FtpResult(bool isCusecess,
string message) { IsSucess = isCusecess; Message = message; }
public bool IsSucess { get; set; } public string Message { get; set; } } } 該文章在 2021/5/11 17:33:25 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |