C# FTP 上传、下载、获取文件列表
生活随笔
收集整理的這篇文章主要介紹了
C# FTP 上传、下载、获取文件列表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
public class FtpHelper{string ftpServerIP;string ftpRemotePath;string ftpUserID;string ftpPassword;string ftpURI;/// <summary>/// 連接FTP/// </summary>/// <param name="FtpServerIP">FTP連接地址</param>/// <param name="FtpRemotePath">指定FTP連接成功后的當前目錄, 如果不指定即默認為根目錄</param>/// <param name="FtpUserID">用戶名</param>/// <param name="FtpPassword">密碼</param>public FtpHelper(string FtpServerIP, string FtpRemotePath, string FtpUserID, string FtpPassword){ftpServerIP = FtpServerIP;ftpRemotePath = FtpRemotePath;ftpUserID = FtpUserID;ftpPassword = FtpPassword;ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";}/// <summary>/// 上傳/// </summary>/// <param name="filename"></param>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.UsePassive = false;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){throw new Exception("Ftphelper Upload Error --> " + ex.Message);}}/// <summary>/// 下載/// </summary>/// <param name="filePath"></param>/// <param name="fileName"></param>public void Download(string filePath, string fileName){FtpWebRequest reqFTP;try{FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileName));reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;reqFTP.UseBinary = true;reqFTP.UsePassive = false;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){throw new Exception("FtpHelper Download Error --> " + ex.Message);}}/// <summary>/// 刪除文件/// </summary>/// <param name="fileName"></param>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;reqFTP.UsePassive = false;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){throw new Exception("FtpHelper Delete Error --> " + ex.Message + " 文件名:" + fileName);}}/// <summary>/// 刪除文件夾/// </summary>/// <param name="folderName"></param>public void RemoveDirectory(string folderName){try{string uri = ftpURI + folderName;FtpWebRequest reqFTP;reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);reqFTP.KeepAlive = false;reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;reqFTP.UsePassive = false;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){throw new Exception("FtpHelper Delete Error --> " + ex.Message + " 文件名:" + folderName);}}/// <summary>/// 獲取當前目錄下明細(包含文件和文件夾)/// </summary>/// <returns></returns>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;ftp.UsePassive = false;WebResponse response = ftp.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);//while (reader.Read() > 0)//{//}string line = reader.ReadLine();//line = reader.ReadLine();//line = reader.ReadLine();while (line != null){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;throw new Exception("FtpHelper Error --> " + ex.Message);}}/// <summary>/// 獲取當前目錄下文件列表(僅文件)/// </summary>/// <returns></returns>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;reqFTP.UsePassive = false;WebResponse response = reqFTP.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);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) 文件不可用(例如,未找到文件,無法訪問文件)。"){throw new Exception("FtpHelper GetFileList Error --> " + ex.Message.ToString());}return downloadFiles;}}/// <summary>/// 獲取當前目錄下所有的文件夾列表(僅文件夾)/// </summary>/// <returns></returns>public string[] GetDirectoryList(){string[] drectory = GetFilesDetailList();string m = string.Empty;foreach (string str in drectory){int dirPos = str.IndexOf("<DIR>");if (dirPos > 0){/*判斷 Windows 風格*/m += str.Substring(dirPos + 5).Trim() + "\n";}else if (str.Trim().Substring(0, 1).ToUpper() == "D"){/*判斷 Unix 風格*/string dir = str.Substring(54).Trim();if (dir != "." && dir != ".."){m += dir + "\n";}}}char[] n = new char[] { '\n' };return m.Split(n);}/// <summary>/// 判斷當前目錄下指定的子目錄是否存在/// </summary>/// <param name="RemoteDirectoryName">指定的目錄名</param>public bool DirectoryExist(string RemoteDirectoryName){string[] dirList = GetDirectoryList();foreach (string str in dirList){if (str.Trim() == RemoteDirectoryName.Trim()){return true;}}return false;}/// <summary>/// 判斷當前目錄下指定的文件是否存在/// </summary>/// <param name="RemoteFileName">遠程文件名</param>public bool FileExist(string RemoteFileName){string[] fileList = GetFileList("*.*");foreach (string str in fileList){if (str.Trim() == RemoteFileName.Trim()){return true;}}return false;}/// <summary>/// 創建文件夾/// </summary>/// <param name="dirName"></param>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.UsePassive = false;reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();Stream ftpStream = response.GetResponseStream();ftpStream.Close();response.Close();}catch (Exception ex){throw new Exception("FtpHelper MakeDir Error --> " + ex.Message);}}/// <summary>/// 獲取指定文件大小/// </summary>/// <param name="filename"></param>/// <returns></returns>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.UsePassive = false;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){throw new Exception("FtpHelper GetFileSize Error --> " + ex.Message);}return fileSize;}/// <summary>/// 改名/// </summary>/// <param name="currentFilename"></param>/// <param name="newFilename"></param>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.UsePassive = false;reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();Stream ftpStream = response.GetResponseStream();ftpStream.Close();response.Close();}catch (Exception ex){throw new Exception("FtpHelper ReName Error --> " + ex.Message);}}/// <summary>/// 移動文件/// </summary>/// <param name="currentFilename"></param>/// <param name="newFilename"></param>public void MovieFile(string currentFilename, string newDirectory){ReName(currentFilename, newDirectory);}/// <summary>/// 切換當前目錄/// </summary>/// <param name="DirectoryName"></param>/// <param name="IsRoot">true 絕對路徑 false 相對路徑</param>public void GotoDirectory(string DirectoryName, bool IsRoot){if (IsRoot){ftpRemotePath = DirectoryName;}else{ftpRemotePath += DirectoryName + "/";}ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";}/// <summary>/// 刪除訂單目錄/// </summary>/// <param name="ftpServerIP">FTP 主機地址</param>/// <param name="folderToDelete">FTP 用戶名</param>/// <param name="ftpUserID">FTP 用戶名</param>/// <param name="ftpPassword">FTP 密碼</param>public static void DeleteOrderDirectory(string ftpServerIP, string folderToDelete, string ftpUserID, string ftpPassword){try{if (!string.IsNullOrEmpty(ftpServerIP) && !string.IsNullOrEmpty(folderToDelete) && !string.IsNullOrEmpty(ftpUserID) && !string.IsNullOrEmpty(ftpPassword)){FtpHelper fw = new FtpHelper(ftpServerIP, folderToDelete, ftpUserID, ftpPassword);//進入訂單目錄fw.GotoDirectory(folderToDelete, true);//獲取規格目錄string[] folders = fw.GetDirectoryList();foreach (string folder in folders){if (!string.IsNullOrEmpty(folder) || folder != ""){//進入訂單目錄string subFolder = folderToDelete + "/" + folder;fw.GotoDirectory(subFolder, true);//獲取文件列表string[] files = fw.GetFileList("*.*");if (files != null){//刪除文件foreach (string file in files){fw.Delete(file);}}//刪除沖印規格文件夾fw.GotoDirectory(folderToDelete, true);fw.RemoveDirectory(folder);}}//刪除訂單文件夾string parentFolder = folderToDelete.Remove(folderToDelete.LastIndexOf('/'));string orderFolder = folderToDelete.Substring(folderToDelete.LastIndexOf('/') + 1);fw.GotoDirectory(parentFolder, true);fw.RemoveDirectory(orderFolder);}else{throw new Exception("FTP 及路徑不能為空!");}}catch (Exception ex){throw new Exception("刪除訂單時發生錯誤,錯誤信息為:" + ex.Message);}}}
?
轉載于:https://www.cnblogs.com/liang-ling/p/5778710.html
總結
以上是生活随笔為你收集整理的C# FTP 上传、下载、获取文件列表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: caffe教程 (2)
- 下一篇: .Net开发环境配置[OS/IIS/VS