使用asp.net FtpWebRequest 實現FTP常用功能
以下程式碼 使用.net FtpWebRequest 實現FTP的常用功能, 程式碼已經除錯通過, 可複製直接使用。 經測試使用此種方式實現的FTP操作與直接使用命令的方式操作FTP要穩定許多。 有設計不好的地方請指正。
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;
using System.Windows.Forms;
using System.Globalization;
namespace FtpTest1
{
public class FtpWeb
{
string ftpServerIP;
string ftpRemotePath;
string ftpUserID;
string ftpPassword;
string ftpURI;
///
/// 連線FTP
///
/// FTP連線地址
/// 指定FTP連線成功後的當前目錄, 如果不指定即預設為根目錄
/// 使用者名稱
/// 密碼
public FtpWeb(string FtpServerIP, string FtpRemotePath, string FtpUserID, string FtpPassword)
{
ftpServerIP = FtpServerIP;
ftpRemotePath = FtpRemotePath;
ftpUserID = FtpUserID;
ftpPassword = FtpPassword;
ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";
}
///
/// 上傳
///
///
public void Upload(string filename)
{
FileInfo fileInf = new FileInfo(filename);
string uri = ftpURI + fileInf.Name;
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
reqFTP.KeepAlive = false;
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.UseBinary = true;
reqFTP.ContentLength = fileInf.Length;
int buffLength = 2048;
byte[] buff = new byte[buffLength];
int contentLen;
FileStream fs = fileInf.OpenRead();
try
{
Stream strm = reqFTP.GetRequestStream();
contentLen = fs.Read(buff, 0, buffLength);
while (contentLen != 0)
{
strm.Write(buff, 0, contentLen);
contentLen = fs.Read(buff, 0, buffLength);
}
strm.Close();
fs.Close();
}
catch (Exception ex)
{
Insert_Standard_ErrorLog.Insert("FtpWeb", "Upload Error --> " + ex.Message);
}
}
///
/// 下載
///
///
///
public void Download(string filePath, string fileName)
{
FtpWebRequest reqFTP;
try
{
FileStream utputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary = true;
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);
while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
readCount = ftpStream.Read(buffer, 0, bufferSize);
}
ftpStream.Close();
outputStream.Close();
response.Close();
}
catch (Exception ex)
{
Insert_Standard_ErrorLog.Insert("FtpWeb", "Download Error --> " + ex.Message);
}
}
///
/// 刪除檔案
///
///
public void Delete(string fileName)
{
try
{
string uri = ftpURI + fileName;
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
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();
}
catch (Exception ex)
{
Insert_Standard_ErrorLog.Insert("FtpWeb", "Delete Error --> " + ex.Message + " 檔名:" + fileName);
}
}
/// 獲取當前目錄下明細(包含檔案和資料夾)
///
///
public string[] GetFilesDetailList()
{
string[] downloadFiles;
try
{
StringBuilder result = new StringBuilder();
FtpWebRequest ftp;
ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));
ftp.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
WebResponse response = ftp.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string line = reader.ReadLine();
line = reader.ReadLine();
line = reader.ReadLine();
while (line != null)
{
result.Append(line);
result.Append("\n");
result.Remove(result.ToString().LastIndexOf("\n"), 1);
reader.Close();
response.Close();
return result.ToString().Split('\n');
}
catch (Exception ex)
{
downloadFiles = null;
Insert_Standard_ErrorLog.Insert("FtpWeb", "GetFilesDetailList Error --> " + ex.Message);
return downloadFiles;
}
}
///
/// 獲取當前目錄下檔案列表(僅檔案)
///
///
public string[] GetFileList(string mask)
{
string[] downloadFiles;
StringBuilder result = new StringBuilder();
FtpWebRequest reqFTP;
try
{
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
WebResponse response = reqFTP.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string line = reader.ReadLine();
while (line != null)
{
if (mask.Trim() != string.Empty && mask.Trim() != "*.*")
{
string mask_ = mask.Substring(0, mask.IndexOf("*"));
if (line.Substring(0, mask_.Length) == mask_)
{
result.Append(line);
result.Append("\n");
}
}
else
{
result.Append(line);
result.Append("\n");
}
line = reader.ReadLine();
}
result.Remove(result.ToString().LastIndexOf('\n'), 1);
reader.Close();
response.Close();
return result.ToString().Split('\n');
}
catch (Exception ex)
{
downloadFiles = null;
if (ex.Message.Trim() != "遠端伺服器返回錯誤: (550) 檔案不可用(例如,未找到檔案,無法訪問檔案)。")
{
Insert_Standard_ErrorLog.Insert("FtpWeb", "GetFileList Error --> " + ex.Message.ToString());
}
return downloadFiles;
}
}
///
/// 獲取當前目錄下所有的資料夾列表(僅資料夾)
///
& nbsp; ///
public string[] GetDirectoryList()
{
string[] drectory = GetFilesDetailList();
string m = string.Empty;
foreach (string str in drectory)
{
if (str.Trim().Substring(0, 1).ToUpper() == "D")
{
m += str.Substring(54).Trim() + "\n";
}
}
char[] n = new char[]{'\n'};
return m.Split(n);
}
///
/// 判斷當前目錄下指定的子目錄是否存在
///
/// 指定的目錄名
public bool DirectoryExist(string RemoteDirectoryName)
{
string[] dirList = GetDirectoryList();
foreach (string str in dirList)
{
if (str.Trim() == RemoteDirectoryName.Trim())
{
return true;
}
}
return false;
}
///
/// 判斷當前目錄下指定的檔案是否存在
///
/// 遠端檔名
public bool FileExist(string RemoteFileName)
{
string[] fileList = GetFileList("*.*");
foreach (string str in fileList)
{
if (str.Trim() == RemoteFileName.Trim())
{
return true;
}
}
return false;
}
///
/// 建立資料夾
///
///
public void MakeDir(string dirName)
{
FtpWebRequest reqFTP;
try
{
// dirName = name of the directory to create.
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + dirName));
reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
ftpStream.Close();
response.Close();
}
catch (Exception ex)
{
Insert_Standard_ErrorLog.Insert("FtpWeb", "MakeDir Error --> " + ex.Message);
}
}
/// 獲取指定檔案大小
///
///
///
public long GetFileSize(string filename)
{
FtpWebRequest reqFTP;
long fileSize = 0;
try
{
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + filename));
reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
; reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
fileSize = response.ContentLength;
ftpStream.Close();
response.Close();
}
catch (Exception ex)
{
Insert_Standard_ErrorLog.Insert("FtpWeb", "GetFileSize Error --> " + ex.Message);
}
return fileSize;
}
///
/// 改名
///
///
///
public void ReName(string currentFilename, string newFilename)
{
FtpWebRequest reqFTP;
try
{
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + currentFilename));
reqFTP.Method = WebRequestMethods.Ftp.Rename;
reqFTP.RenameTo = newFilename;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
ftpStream.Close();
response.Close();
}
catch (Exception ex)
{
Insert_Standard_ErrorLog.Insert("FtpWeb", "ReName Error --> " + ex.Message);
}
}
///
/// 移動檔案
///
///
///
public void MovieFile(string currentFilename, string newDirectory)
{
ReName(currentFilename, newDirectory);
}
///
/// 切換當前目錄
///
///
/// true 絕對路徑 false 相對路徑
public void GotoDirectory(string DirectoryName, bool IsRoot)
{
if (IsRoot)
{
ftpRemotePath = DirectoryName;
}
else
{
ftpRemotePath += DirectoryName + "/";
}
ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";
}
}
public class Insert_Standard_ErrorLog
{
public static void Insert(string x, string y )
{
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-626545/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- FTP客戶端c程式碼功能實現FTP客戶端C程式
- ASP.net core 使用UEditor.Core 實現 ueditor 上傳功能ASP.NET
- 【SpringBoot實戰】實現WEB的常用功能Spring BootWeb
- 使用commons-pool2實現FTP連線池FTP
- 美顏sdk常用功能的實現原理
- 使用 jQuery 實現分頁功能jQuery
- 使用redis實現互粉功能Redis
- 如何使用Python實現FTP伺服器?Python學習教程PythonFTP伺服器
- Less常用功能使用
- 美顏sdk常用的功能有哪些?美顏功能實現流程詳解
- Python使用socket的UDP協議實現FTP檔案服務PythonUDP協議FTP
- Go使用websocket實現彈幕功能GoWeb
- Yii使用DbTarget實現日誌功能
- postgresql使用pgagent來實現job功能SQL
- 如何使用Python 實現秒錶功能?Python
- asp.net core 實現 face recognition 使用 tensorflowjs(原始碼)ASP.NETJS原始碼
- 根據原始碼模擬實現express框架常用功能原始碼Express框架
- SQL Azure使用Excel實現BI功能:PowerPivotTWSQLExcel
- 使用 iOS OpenGL ES 實現長腿功能iOS
- 30 個Python程式碼實現的常用功能,精心整理版Python
- Asp.Net Core 使用Monaco Editor 實現程式碼編輯器ASP.NET
- 直播短影片平臺最常用的美顏SDK功能是什麼?功能如何實現?
- 一起來實現單使用者登入 —— 功能實現
- 使用 HTML5 Canvas 實現簽名功能HTMLCanvas
- springboot整合ElasticSearch使用completion實現補全功能Spring BootElasticsearch
- 使用Spring Boot實現檔案上傳功能Spring Boot
- springboot整合FastDFS使用實現防盜鏈功能Spring BootAST
- Java Web實現使用者登入功能JavaWeb
- 使用java實現希表的基礎功能Java
- 使用IDEA+Maven實現MapReduce的WordCount功能IdeaMaven
- ftp工具,ftp工具怎麼使用,如何操作?使用教程圖解。FTP圖解
- ftp軟體使用,6步掌握ftp軟體使用方法FTP
- 可平滑替代FTP的FTP替代解決方案,具有哪些強大功能?FTP
- 如何使用 Vue3 實現文章目錄功能Vue
- mysql使用自定義序列實現row_number功能MySql
- Kubernetes 使用 Ingress-nginx 實現灰度釋出功能Nginx
- SpringBoot整合Redis使用Restful風格實現CRUD功能Spring BootRedisREST
- 使用Redis的有序集合實現排行榜功能Redis
- 用 Python 快速實現 HTTP 和 FTP 伺服器PythonHTTPFTP伺服器