【C#】工具类-FTP操作封装类FTPHelper
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【C#】工具类-FTP操作封装类FTPHelper,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含8555字,纯文字阅读大概需要13分钟。
内容图文
转载:http://blog.csdn.net/gdjlc/article/details/11968477
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; public class FTPHelper { /// <summary> /// FTP请求对象 /// </summary> FtpWebRequest request = null; ///<summary>/// FTP响应对象 ///</summary> FtpWebResponse response = null; ///<summary>/// FTP服务器地址 ///</summary>publicstring ftpURI { get; privateset; } ///<summary>/// FTP服务器IP ///</summary>publicstring ftpServerIP { get; privateset; } ///<summary>/// FTP服务器默认目录 ///</summary>publicstring ftpRemotePath { get; privateset; } ///<summary>/// FTP服务器登录用户名 ///</summary>publicstring ftpUserID { get; privateset; } ///<summary>/// FTP服务器登录密码 ///</summary>publicstring ftpPassword { get; privateset; } ///<summary>/// 初始化 ///</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) { 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; } } ///<summary>/// 建立FTP链接,返回响应对象 ///</summary>///<param name="uri">FTP地址</param>///<param name="ftpMethod">操作命令</param>///<returns></returns>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(); } ///<summary>/// 建立FTP链接,返回请求对象 ///</summary>///<param name="uri">FTP地址</param>///<param name="ftpMethod">操作命令</param>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; } ///<summary>/// 创建目录 ///</summary>///<param name="remoteDirectoryName">目录名</param>publicvoid CreateDirectory(string remoteDirectoryName) { response = Open(new Uri(ftpURI + remoteDirectoryName), WebRequestMethods.Ftp.MakeDirectory); } ///<summary>/// 更改目录或文件名 ///</summary>///<param name="currentName">当前名称</param>///<param name="newName">修改后新名称</param>publicvoid ReName(string currentName, string newName) { request = OpenRequest(new Uri(ftpURI + currentName), WebRequestMethods.Ftp.Rename); request.RenameTo = newName; response = (FtpWebResponse)request.GetResponse(); } ///<summary>/// 切换当前目录 ///</summary>///<param name="IsRoot">true:绝对路径 false:相对路径</param>publicvoid GotoDirectory(string DirectoryName, bool IsRoot) { if (IsRoot) ftpRemotePath = DirectoryName; else ftpRemotePath += "/" + DirectoryName; ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/"; } ///<summary>/// 删除目录(包括下面所有子目录和子文件) ///</summary>///<param name="remoteDirectoryName">要删除的带路径目录名:如web/test</param>/* * 例:删除test目录 FTPHelper helper = new FTPHelper("x.x.x.x", "web", "user", "password"); helper.RemoveDirectory("web/test"); */publicvoid 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); } ///<summary>/// 文件上传 ///</summary>///<param name="localFilePath">本地文件路径</param>publicvoid 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 = newbyte[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); } } } } ///<summary>/// 删除文件 ///</summary>///<param name="remoteFileName">要删除的文件名</param>publicvoid DeleteFile(string remoteFileName) { response = Open(new Uri(ftpURI + remoteFileName), WebRequestMethods.Ftp.DeleteFile); } ///<summary>/// 获取当前目录的文件和一级子目录信息 ///</summary>///<returns></returns>public List<FileStruct> ListFilesAndDirectories() { var fileList = new List<FileStruct>(); 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 <DIR> 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("<DIR>") > 0 ? true : false, CreateTime = dtDateTime, Name = arrs[arrs.Length - 1], Path = ftpRemotePath + "/" + arrs[arrs.Length - 1] }; fileList.Add(model); } } } return fileList; } ///<summary>/// 列出当前目录的所有文件 ///</summary>public List<FileStruct> ListFiles() { var listAll = ListFilesAndDirectories(); var listFile = listAll.Where(m => m.IsDirectory == false).ToList(); return listFile; } ///<summary>/// 列出当前目录的所有一级子目录 ///</summary>public List<FileStruct> ListDirectories() { var listAll = ListFilesAndDirectories(); var listFile = listAll.Where(m => m.IsDirectory == true).ToList(); return listFile; } ///<summary>/// 判断当前目录下指定的子目录或文件是否存在 ///</summary>///<param name="remoteName">指定的目录或文件名</param>publicbool IsExist(string remoteName) { var list = ListFilesAndDirectories(); if (list.Count(m => m.Name == remoteName) > 0) returntrue; returnfalse; } ///<summary>/// 判断当前目录下指定的一级子目录是否存在 ///</summary>///<param name="RemoteDirectoryName">指定的目录名</param>publicbool IsDirectoryExist(string remoteDirectoryName) { var listDir = ListDirectories(); if (listDir.Count(m => m.Name == remoteDirectoryName) > 0) returntrue; returnfalse; } ///<summary>/// 判断当前目录下指定的子文件是否存在 ///</summary>///<param name="RemoteFileName">远程文件名</param>publicbool IsFileExist(string remoteFileName) { var listFile = ListFiles(); if (listFile.Count(m => m.Name == remoteFileName) > 0) returntrue; returnfalse; } ///<summary>/// 下载 ///</summary>///<param name="saveFilePath">下载后的保存路径</param>///<param name="downloadFileName">要下载的文件名</param>publicvoid 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 = newbyte[bufferSize]; readCount = ftpStream.Read(buffer, 0, bufferSize); while (readCount > 0) { outputStream.Write(buffer, 0, readCount); readCount = ftpStream.Read(buffer, 0, bufferSize); } } } } } publicclass FileStruct { ///<summary>/// 是否为目录 ///</summary>publicbool IsDirectory { get; set; } ///<summary>/// 创建时间 ///</summary>public DateTime CreateTime { get; set; } ///<summary>/// 文件或目录名称 ///</summary>publicstring Name { get; set; } ///<summary>/// 路径 ///</summary>publicstring Path { get; set; } }
开源.NET FTP组件edtFTPnet 用法
http://www.cnblogs.com/gdjlc/p/3341000.html
原文:http://www.cnblogs.com/zfanlong1314/p/4218939.html
内容总结
以上是互联网集市为您收集整理的【C#】工具类-FTP操作封装类FTPHelper全部内容,希望文章能够帮你解决【C#】工具类-FTP操作封装类FTPHelper所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。