博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]C# FTP操作类
阅读量:5128 次
发布时间:2019-06-13

本文共 34163 字,大约阅读时间需要 113 分钟。

 

转自

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net;using System.Text;using System.Threading.Tasks;namespace ManagementProject{    public class FTPHelper    {        string ftpRemotePath;        #region 变量属性        ///         /// Ftp服务器ip        ///         public static string FtpServerIP = "";        ///         /// Ftp 指定用户名        ///         public static string FtpUserID = "";        ///         /// Ftp 指定用户密码        ///         public static string FtpPassword = "";        public static string ftpURI = "ftp://" + FtpServerIP + "/";        #endregion        #region 从FTP服务器下载文件,指定本地路径和本地文件名        ///         /// 从FTP服务器下载文件,指定本地路径和本地文件名        ///         /// 远程文件名        /// 保存本地的文件名(包含路径)        /// 是否启用身份验证(false:表示允许用户匿名下载)        /// 报告进度的处理(第一个参数:总大小,第二个参数:当前进度)        /// 
是否下载成功
public static bool FtpDownload(string remoteFileName, string localFileName, bool ifCredential, Action
updateProgress = null) { FtpWebRequest reqFTP, ftpsize; Stream ftpStream = null; FtpWebResponse response = null; FileStream outputStream = null; try { outputStream = new FileStream(localFileName, FileMode.Create); if (FtpServerIP == null || FtpServerIP.Trim().Length == 0) { throw new Exception("ftp下载目标服务器地址未设置!"); } Uri uri = new Uri("ftp://" + FtpServerIP + "/" + remoteFileName); ftpsize = (FtpWebRequest)FtpWebRequest.Create(uri); ftpsize.UseBinary = true; reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri); reqFTP.UseBinary = true; reqFTP.KeepAlive = false; if (ifCredential)//使用用户身份认证 { ftpsize.Credentials = new NetworkCredential(FtpUserID, FtpPassword); reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword); } ftpsize.Method = WebRequestMethods.Ftp.GetFileSize; FtpWebResponse re = (FtpWebResponse)ftpsize.GetResponse(); long totalBytes = re.ContentLength; re.Close(); reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; response = (FtpWebResponse)reqFTP.GetResponse(); ftpStream = response.GetResponseStream(); //更新进度 if (updateProgress != null) { updateProgress((int)totalBytes, 0);//更新进度条 } long totalDownloadedByte = 0; int bufferSize = 2048; int readCount; byte[] buffer = new byte[bufferSize]; readCount = ftpStream.Read(buffer, 0, bufferSize); while (readCount > 0) { totalDownloadedByte = readCount + totalDownloadedByte; outputStream.Write(buffer, 0, readCount); //更新进度 if (updateProgress != null) { updateProgress((int)totalBytes, (int)totalDownloadedByte);//更新进度条 } readCount = ftpStream.Read(buffer, 0, bufferSize); } ftpStream.Close(); outputStream.Close(); response.Close(); return true; } catch (Exception ex) { return false; throw; } finally { if (ftpStream != null) { ftpStream.Close(); } if (outputStream != null) { outputStream.Close(); } if (response != null) { response.Close(); } } } ///
/// 从FTP服务器下载文件,指定本地路径和本地文件名(支持断点下载) /// ///
远程文件名 ///
保存本地的文件名(包含路径) ///
是否启用身份验证(false:表示允许用户匿名下载) ///
已下载文件流大小 ///
报告进度的处理(第一个参数:总大小,第二个参数:当前进度) ///
是否下载成功
public static bool FtpBrokenDownload(string remoteFileName, string localFileName, bool ifCredential, long size, Action
updateProgress = null) { FtpWebRequest reqFTP, ftpsize; Stream ftpStream = null; FtpWebResponse response = null; FileStream outputStream = null; try { outputStream = new FileStream(localFileName, FileMode.Append); if (FtpServerIP == null || FtpServerIP.Trim().Length == 0) { throw new Exception("ftp下载目标服务器地址未设置!"); } Uri uri = new Uri("ftp://" + FtpServerIP + "/" + remoteFileName); ftpsize = (FtpWebRequest)FtpWebRequest.Create(uri); ftpsize.UseBinary = true; ftpsize.ContentOffset = size; reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri); reqFTP.UseBinary = true; reqFTP.KeepAlive = false; reqFTP.ContentOffset = size; if (ifCredential)//使用用户身份认证 { ftpsize.Credentials = new NetworkCredential(FtpUserID, FtpPassword); reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword); } ftpsize.Method = WebRequestMethods.Ftp.GetFileSize; FtpWebResponse re = (FtpWebResponse)ftpsize.GetResponse(); long totalBytes = re.ContentLength; re.Close(); reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; response = (FtpWebResponse)reqFTP.GetResponse(); ftpStream = response.GetResponseStream(); //更新进度 if (updateProgress != null) { updateProgress((int)totalBytes, 0);//更新进度条 } long totalDownloadedByte = 0; int bufferSize = 2048; int readCount; byte[] buffer = new byte[bufferSize]; readCount = ftpStream.Read(buffer, 0, bufferSize); while (readCount > 0) { totalDownloadedByte = readCount + totalDownloadedByte; outputStream.Write(buffer, 0, readCount); //更新进度 if (updateProgress != null) { updateProgress((int)totalBytes, (int)totalDownloadedByte);//更新进度条 } readCount = ftpStream.Read(buffer, 0, bufferSize); } ftpStream.Close(); outputStream.Close(); response.Close(); return true; } catch (Exception ex) { return false; throw; } finally { if (ftpStream != null) { ftpStream.Close(); } if (outputStream != null) { outputStream.Close(); } if (response != null) { response.Close(); } } } ///
/// 从FTP服务器下载文件,指定本地路径和本地文件名 /// ///
远程文件名 ///
保存本地的文件名(包含路径) ///
是否启用身份验证(false:表示允许用户匿名下载) ///
报告进度的处理(第一个参数:总大小,第二个参数:当前进度) ///
是否断点下载:true 会在localFileName 找是否存在已经下载的文件,并计算文件流大小 ///
是否下载成功
public static bool FtpDownload(string remoteFileName, string localFileName, bool ifCredential, bool brokenOpen, Action
updateProgress = null) { if (brokenOpen) { try { long size = 0; if (File.Exists(localFileName)) { using (FileStream outputStream = new FileStream(localFileName, FileMode.Open)) { size = outputStream.Length; } } return FtpBrokenDownload(remoteFileName, localFileName, ifCredential, size, updateProgress); } catch { throw; } } else { return FtpDownload(remoteFileName, localFileName, ifCredential, updateProgress); } } #endregion #region 上传文件到FTP服务器 ///
/// 上传文件到FTP服务器 /// ///
本地带有完整路径的文件名 ///
报告进度的处理(第一个参数:总大小,第二个参数:当前进度) ///
是否下载成功
public static bool FtpUploadFile(string localFullPathName, Action
updateProgress = null) { FtpWebRequest reqFTP; Stream stream = null; FtpWebResponse response = null; FileStream fs = null; try { FileInfo finfo = new FileInfo(localFullPathName); if (FtpServerIP == null || FtpServerIP.Trim().Length == 0) { throw new Exception("ftp上传目标服务器地址未设置!"); } Uri uri = new Uri("ftp://" + FtpServerIP + "/" + finfo.Name); reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri); reqFTP.KeepAlive = false; reqFTP.UseBinary = true; reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);//用户,密码 reqFTP.Method = WebRequestMethods.Ftp.UploadFile;//向服务器发出下载请求命令 reqFTP.ContentLength = finfo.Length;//为request指定上传文件的大小 response = reqFTP.GetResponse() as FtpWebResponse; reqFTP.ContentLength = finfo.Length; int buffLength = 1024; byte[] buff = new byte[buffLength]; int contentLen; fs = finfo.OpenRead(); stream = reqFTP.GetRequestStream(); contentLen = fs.Read(buff, 0, buffLength); int allbye = (int)finfo.Length; //更新进度 if (updateProgress != null) { updateProgress((int)allbye, 0);//更新进度条 } int startbye = 0; while (contentLen != 0) { startbye = contentLen + startbye; stream.Write(buff, 0, contentLen); //更新进度 if (updateProgress != null) { updateProgress((int)allbye, (int)startbye);//更新进度条 } contentLen = fs.Read(buff, 0, buffLength); } stream.Close(); fs.Close(); response.Close(); return true; } catch (Exception ex) { return false; throw; } finally { if (fs != null) { fs.Close(); } if (stream != null) { stream.Close(); } if (response != null) { response.Close(); } } } ///
/// 上传文件到FTP服务器(断点续传) /// ///
本地文件全路径名称:C:\Users\JianKunKing\Desktop\IronPython脚本测试工具 ///
远程文件所在文件夹路径 ///
报告进度的处理(第一个参数:总大小,第二个参数:当前进度) ///
public static bool FtpUploadBroken(string localFullPath, string remoteFilepath, Action
updateProgress = null) { if (remoteFilepath == null) { remoteFilepath = ""; } string newFileName = string.Empty; bool success = true; FileInfo fileInf = new FileInfo(localFullPath); long allbye = (long)fileInf.Length; if (fileInf.Name.IndexOf("#") == -1) { newFileName = RemoveSpaces(fileInf.Name); } else { newFileName = fileInf.Name.Replace("#", "#"); newFileName = RemoveSpaces(newFileName); } long startfilesize = GetFileSize(newFileName, remoteFilepath); if (startfilesize >= allbye) { return false; } long startbye = startfilesize; //更新进度 if (updateProgress != null) { updateProgress((int)allbye, (int)startfilesize);//更新进度条 } string uri; if (remoteFilepath.Length == 0) { uri = "ftp://" + FtpServerIP + "/" + newFileName; } else { uri = "ftp://" + FtpServerIP + "/" + remoteFilepath + "/" + newFileName; } FtpWebRequest reqFTP; // 根据uri创建FtpWebRequest对象 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword); // 默认为true,连接不会被关闭 // 在一个命令之后被执行 reqFTP.KeepAlive = false; // 指定执行什么命令 reqFTP.Method = WebRequestMethods.Ftp.AppendFile; // 指定数据传输类型 reqFTP.UseBinary = true; // 上传文件时通知服务器文件的大小 reqFTP.ContentLength = fileInf.Length; int buffLength = 2048;// 缓冲大小设置为2kb byte[] buff = new byte[buffLength]; // 打开一个文件流 (System.IO.FileStream) 去读上传的文件 FileStream fs = fileInf.OpenRead(); Stream strm = null; try { // 把上传的文件写入流 strm = reqFTP.GetRequestStream(); // 每次读文件流的2kb fs.Seek(startfilesize, 0); int contentLen = fs.Read(buff, 0, buffLength); // 流内容没有结束 while (contentLen != 0) { // 把内容从file stream 写入 upload stream strm.Write(buff, 0, contentLen); contentLen = fs.Read(buff, 0, buffLength); startbye += contentLen; //更新进度 if (updateProgress != null) { updateProgress((int)allbye, (int)startbye);//更新进度条 } } // 关闭两个流 strm.Close(); fs.Close(); } catch { success = false; throw; } finally { if (fs != null) { fs.Close(); } if (strm != null) { strm.Close(); } } return success; } ///
/// 去除空格 /// ///
///
private static string RemoveSpaces(string str) { string a = ""; CharEnumerator CEnumerator = str.GetEnumerator(); while (CEnumerator.MoveNext()) { byte[] array = new byte[1]; array = System.Text.Encoding.ASCII.GetBytes(CEnumerator.Current.ToString()); int asciicode = (short)(array[0]); if (asciicode != 32) { a += CEnumerator.Current.ToString(); } } string sdate = System.DateTime.Now.Year.ToString() + System.DateTime.Now.Month.ToString() + System.DateTime.Now.Day.ToString() + System.DateTime.Now.Hour.ToString() + System.DateTime.Now.Minute.ToString() + System.DateTime.Now.Second.ToString() + System.DateTime.Now.Millisecond.ToString(); return a.Split('.')[a.Split('.').Length - 2] + "." + a.Split('.')[a.Split('.').Length - 1]; } ///
/// 获取已上传文件大小 /// ///
文件名称 ///
服务器文件路径 ///
public static long GetFileSize(string filename, string remoteFilepath) { long filesize = 0; try { FtpWebRequest reqFTP; FileInfo fi = new FileInfo(filename); string uri; if (remoteFilepath.Length == 0) { uri = "ftp://" + FtpServerIP + "/" + fi.Name; } else { uri = "ftp://" + FtpServerIP + "/" + remoteFilepath + "/" + fi.Name; } reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri); reqFTP.KeepAlive = false; reqFTP.UseBinary = true; reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);//用户,密码 reqFTP.Method = WebRequestMethods.Ftp.GetFileSize; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); filesize = response.ContentLength; return filesize; } catch { return 0; } } //public void Connect(String path, string ftpUserID, string ftpPassword)//连接ftp //{ // // 根据uri创建FtpWebRequest对象 // reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path)); // // 指定数据传输类型 // reqFTP.UseBinary = true; // // ftp用户名和密码 // reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); //} #endregion #region 获取当前目录下明细 ///
/// 获取当前目录下明细(包含文件和文件夹) /// ///
public static 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(), Encoding.Default); string 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 ex; } } ///
/// 获取当前目录下文件列表(仅文件) /// ///
public static 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(), 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; throw ex; } } ///
/// 获取当前目录下所有的文件夹列表(仅文件夹) /// ///
public static string[] GetDirectoryList() { string[] drectory = GetFilesDetailList(); string m = string.Empty; foreach (string str in drectory) { int dirPos = str.IndexOf("
"); 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); } #endregion #region 删除文件及文件夹 ///
/// 删除文件 /// ///
public static bool 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(); return true; } catch (Exception ex) { return false; throw ex; } } ///
/// 删除文件夹 /// ///
public static 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; 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 ex; } } #endregion #region 其他操作 ///
/// 获取指定文件大小 /// ///
///
public static 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) { throw ex; } return fileSize; } ///
/// 判断当前目录下指定的子目录是否存在 /// ///
指定的目录名 public bool DirectoryExist(string RemoteDirectoryName) { try { string[] dirList = GetDirectoryList(); foreach (string str in dirList) { if (str.Trim() == RemoteDirectoryName.Trim()) { return true; } } return false; } catch { 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) { throw ex; } } ///
/// 改名 /// ///
///
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) { throw ex; } } ///
/// 移动文件 /// ///
///
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 + "/"; } #endregion }}FTPHelper
View Code

 

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.IO;public class FTPHelper{    ///     /// FTP请求对象    ///     FtpWebRequest request = null;    ///     /// FTP响应对象    ///     FtpWebResponse response = null;    ///     /// FTP服务器地址    ///     public string ftpURI { get; private set; }    ///     /// FTP服务器IP    ///     public string ftpServerIP { get; private set; }    ///     /// FTP服务器默认目录    ///     public string ftpRemotePath { get; private set; }    ///     /// FTP服务器登录用户名    ///     public string ftpUserID { get; private set; }    ///     /// FTP服务器登录密码    ///     public string ftpPassword { get; private set; }    ///       /// 初始化    ///       /// FTP连接地址      /// 指定FTP连接成功后的当前目录, 如果不指定即默认为根目录      /// 用户名      /// 密码      public FTPHelper(string ftpServerIP, string ftpRemotePath, string ftpUserID, string ftpPassword)    {        this.ftpServerIP = ftpServerIP;        this.ftpRemotePath = ftpRemotePath;        this.ftpUserID = ftpUserID;        this.ftpPassword = ftpPassword;        this.ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";    }    ~FTPHelper()    {        if (response != null)        {            response.Close();            response = null;        }        if (request != null)        {            request.Abort();            request = null;        }    }    ///     /// 建立FTP链接,返回响应对象    ///     /// FTP地址    /// 操作命令    /// 
private FtpWebResponse Open(Uri uri, string ftpMethod) { request = (FtpWebRequest)FtpWebRequest.Create(uri); request.Method = ftpMethod; request.UseBinary = true; request.KeepAlive = false; request.Credentials = new NetworkCredential(this.ftpUserID, this.ftpPassword); return (FtpWebResponse)request.GetResponse(); } /// /// 建立FTP链接,返回请求对象 /// /// FTP地址 /// 操作命令 private FtpWebRequest OpenRequest(Uri uri, string ftpMethod) { request = (FtpWebRequest)WebRequest.Create(uri); request.Method = ftpMethod; request.UseBinary = true; request.KeepAlive = false; request.Credentials = new NetworkCredential(this.ftpUserID, this.ftpPassword); return request; } /// /// 创建目录 /// /// 目录名 public void CreateDirectory(string remoteDirectoryName) { response = Open(new Uri(ftpURI + remoteDirectoryName), WebRequestMethods.Ftp.MakeDirectory); } /// /// 更改目录或文件名 /// /// 当前名称 /// 修改后新名称 public void ReName(string currentName, string newName) { request = OpenRequest(new Uri(ftpURI + currentName), WebRequestMethods.Ftp.Rename); request.RenameTo = newName; response = (FtpWebResponse)request.GetResponse(); } /// /// 切换当前目录 /// /// true:绝对路径 false:相对路径 public void GotoDirectory(string DirectoryName, bool IsRoot) { if (IsRoot) ftpRemotePath = DirectoryName; else ftpRemotePath += "/" + DirectoryName; ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/"; } /// /// 删除目录(包括下面所有子目录和子文件) /// /// 要删除的带路径目录名:如web/test /* * 例:删除test目录 FTPHelper helper = new FTPHelper("x.x.x.x", "web", "user", "password"); helper.RemoveDirectory("web/test"); */ public void RemoveDirectory(string remoteDirectoryName) { GotoDirectory(remoteDirectoryName, true); var listAll = ListFilesAndDirectories(); foreach (var m in listAll) { if (m.IsDirectory) RemoveDirectory(m.Path); else DeleteFile(m.Name); } GotoDirectory(remoteDirectoryName, true); response = Open(new Uri(ftpURI), WebRequestMethods.Ftp.RemoveDirectory); } /// /// 文件上传 /// /// 本地文件路径 public void Upload(string localFilePath) { FileInfo fileInf = new FileInfo(localFilePath); request = OpenRequest(new Uri(ftpURI + fileInf.Name), WebRequestMethods.Ftp.UploadFile); request.ContentLength = fileInf.Length; int buffLength = 2048; byte[] buff = new byte[buffLength]; int contentLen; using (var fs = fileInf.OpenRead()) { using (var strm = request.GetRequestStream()) { contentLen = fs.Read(buff, 0, buffLength); while (contentLen != 0) { strm.Write(buff, 0, contentLen); contentLen = fs.Read(buff, 0, buffLength); } } } } /// /// 删除文件 /// /// 要删除的文件名 public void DeleteFile(string remoteFileName) { response = Open(new Uri(ftpURI + remoteFileName), WebRequestMethods.Ftp.DeleteFile); } /// /// 获取当前目录的文件和一级子目录信息 /// ///
public List
ListFilesAndDirectories() { var fileList = new List
(); response = Open(new Uri(ftpURI), WebRequestMethods.Ftp.ListDirectoryDetails); using (var stream = response.GetResponseStream()) { using (var sr = new StreamReader(stream)) { string line = null; while ((line = sr.ReadLine()) != null) { //line的格式如下: //08-18-13 11:05PM
aspnet_client //09-22-13 11:39PM 2946 Default.aspx DateTime dtDate = DateTime.ParseExact(line.Substring(0, 8), "MM-dd-yy", null); DateTime dtDateTime = DateTime.Parse(dtDate.ToString("yyyy-MM-dd") + line.Substring(8, 9)); string[] arrs = line.Split(' '); var model = new FileStruct() { IsDirectory = line.IndexOf("
") > 0 ? true : false, CreateTime = dtDateTime, Name = arrs[arrs.Length - 1], Path = ftpRemotePath + "/" + arrs[arrs.Length - 1] }; fileList.Add(model); } } } return fileList; } ///
/// 列出当前目录的所有文件 /// public List
ListFiles() { var listAll = ListFilesAndDirectories(); var listFile = listAll.Where(m => m.IsDirectory == false).ToList(); return listFile; } ///
/// 列出当前目录的所有一级子目录 /// public List
ListDirectories() { var listAll = ListFilesAndDirectories(); var listFile = listAll.Where(m => m.IsDirectory == true).ToList(); return listFile; } ///
/// 判断当前目录下指定的子目录或文件是否存在 /// ///
指定的目录或文件名 public bool IsExist(string remoteName) { var list = ListFilesAndDirectories(); if (list.Count(m => m.Name == remoteName) > 0) return true; return false; } ///
/// 判断当前目录下指定的一级子目录是否存在 /// ///
指定的目录名 public bool IsDirectoryExist(string remoteDirectoryName) { var listDir = ListDirectories(); if (listDir.Count(m => m.Name == remoteDirectoryName) > 0) return true; return false; } ///
/// 判断当前目录下指定的子文件是否存在 /// ///
远程文件名 public bool IsFileExist(string remoteFileName) { var listFile = ListFiles(); if (listFile.Count(m => m.Name == remoteFileName) > 0) return true; return false; } ///
/// 下载 /// ///
下载后的保存路径 ///
要下载的文件名 public void Download(string saveFilePath, string downloadFileName) { using (FileStream outputStream = new FileStream(saveFilePath + "\\" + downloadFileName, FileMode.Create)) { response = Open(new Uri(ftpURI + downloadFileName), WebRequestMethods.Ftp.DownloadFile); using (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); } } } } }public class FileStruct{ ///
/// 是否为目录 /// public bool IsDirectory { get; set; } ///
/// 创建时间 /// public DateTime CreateTime { get; set; } ///
/// 文件或目录名称 /// public string Name { get; set; } ///
/// 路径 /// public string Path { get; set; }}
FTPHelper

 

转载于:https://www.cnblogs.com/z45281625/p/8796616.html

你可能感兴趣的文章
Java-----关于eclipse导入项目发生的问题及解决办法
查看>>
03-第一个C语言程序的分析
查看>>
Spring boot+Swagger2
查看>>
商品搜索引擎---推荐系统设计
查看>>
ASP.NET Core MVC 源码学习:Routing 路由(转)
查看>>
Windows中redis的下载及安装、设置
查看>>
【云安全与同态加密_调研分析(1)】国外云安全标准机构——By Me
查看>>
【ES6】更易于继承的类语法
查看>>
Python-S9——Day109-Git及Redis
查看>>
[Codeforces] 650A - Watchmen
查看>>
Linux简单地隐藏文件及显示隐藏文件
查看>>
c和c++总结
查看>>
关于Unity中的transform组件(二)
查看>>
【BZOJ】2818: Gcd(欧拉函数+质数)
查看>>
【POJ】1935 Journey(树形dp)
查看>>
计算机二级教程python第一章 程序设计语言
查看>>
假如女人是一种编程语言,你会更喜欢哪一种
查看>>
debian 64位系统中添加对32位的支持
查看>>
基于CentOS6.5或Ubuntu14.04下Suricata里搭配安装 ELK (elasticsearch, logstash, kibana)(图文详解)...
查看>>
如果遇到Hadoop集群正常,MapReduce作业运行出现错误,如何来查看作业运行日志(图文详解)...
查看>>