博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于FTP操作的功能类
阅读量:5745 次
发布时间:2019-06-18

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

自己在用的FTP类,实现了检查FTP链接以及返回FTP没有反应的情况。

 

public delegate void ShowError(string content, string title);    ///     /// 使用FtpWebRequest进行FTP操作    ///     public class VeviFtpHelper:IDisposable    {        string ftpHost;//FTP HostName or IPAddress        string ftpUserID;        string ftpPassword;        int port = 21;        string ftpName;        ///         /// FTP根目录URI        ///         string ftpRootURI;        ///         /// FTP的IP地址        ///         string ftpIPAddress;        FtpWebRequest reqFTP;        //        bool isconnect = false;        #region 属性        ///         /// FTP根目录URI        ///         public string FTPRootURI        {            get { return ftpRootURI; }        }        #endregion        #region 事件        public event ShowError ShowErrorEvent;        private void ErrorNotify(string content, string title)        {            if (ShowErrorEvent != null)                ShowErrorEvent(content, title);        }        #endregion        #region 构造函数        public VeviFtpHelper(string hostName, string userID, string passWord)        {            ftpHost = hostName;            ftpUserID = userID;            ftpPassword = passWord;            PrepareFTPInfo();        }        public VeviFtpHelper(string hostName, string userID, string passWord, int port):this(hostName,userID,passWord)        {            this.port = port;            PrepareFTPInfo();        }        public VeviFtpHelper(string hostName, string ftpName, string userID, string passWord)            : this(hostName, userID, passWord)        {            this.ftpName = ftpName;            PrepareFTPInfo();        }        public VeviFtpHelper(string hostName, string ftpName, string userID, string passWord, int port)            : this(hostName,ftpName, userID, passWord)        {            this.port = port;            this.ftpName = ftpName;            PrepareFTPInfo();        }        #endregion        public bool PrepareFTPInfo()        {            try            {                IPEndPoint remoteEndPoint = new IPEndPoint                        (IPAddress.Parse(ftpHost), port);                ftpIPAddress = remoteEndPoint.Address.ToString();                ftpRootURI = "ftp://" + ftpIPAddress + "/";                if (!string.IsNullOrEmpty(ftpName))                    ftpRootURI += ftpName + "/";            }            catch (FormatException)            {                ErrorNotify("FTP地址的格式不正确,或者连接不到FTP主机。", "FTP地址错误");                return false;            }            catch (Exception ex)            {                ErrorNotify(ex.Message, "连接错误");                return false;            }            return true;        }        private bool Connect(string path)        {            try            {                if (!PrepareFTPInfo())                    return false;                if (string.IsNullOrEmpty(path))                    path = ftpRootURI;                //connect to ftp                // 根据uri创建FtpWebRequest对象                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));                // 指定数据传输类型                reqFTP.UseBinary = true;                // ftp用户名和密码                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);                //                isconnect = true;            }            catch (FormatException)            {                DisConnect();                ErrorNotify("FTP地址的格式不正确,或者连接不到FTP主机。", "FTP地址错误");                return false;            }            catch (Exception ex)            {                DisConnect();                ErrorNotify(ex.Message, "连接错误");                return false;            }            return true;        }        private void DisConnect()        {            isconnect = false;        }        #region Methods        #region 判断是否存在        ///         /// FTP测试        ///         /// 
public bool ExistFTP() { if (!Connect("")) { return false; } try { reqFTP.Method = WebRequestMethods.Ftp.ListDirectory; WebResponse response = reqFTP.GetResponse(); StreamReader reader = new StreamReader (response.GetResponseStream(), System.Text.Encoding.Default); string line = reader.ReadLine(); return true; } catch (Exception e1) { DisConnect(); ErrorNotify(e1.Message, "连接失败"); return false; } } /// /// FTP是否存在
的路径 ///
/// ftp路径 ///
public bool ExistPath(string path) { if (!Connect(path)) return false; try { reqFTP.Method = WebRequestMethods.Ftp.ListDirectory; WebResponse response = reqFTP.GetResponse(); StreamReader reader = new StreamReader (response.GetResponseStream(), System.Text.Encoding.Default); string line = reader.ReadLine(); DisConnect(); return true; } catch (Exception e1) { ErrorNotify("FTP路径不存在!\r\n" + e1.Message, "连接失败"); DisConnect(); return false; } } /// /// 是否存在文件 /// /// /// /// ///
public bool ExistFile(string path, string fileName, out string info) { return GetFileList(path, out info).Contains(fileName); } public bool ExistFile(string path, string fileName) { string info; return GetFileList(path, out info).Contains(fileName); } /// /// 是否存在文件夹 /// /// /// /// ///
public bool ExistFolder(string path, string folderName, out string info) { return GetFolderList(path, out info).Contains(folderName); } #endregion #region 获取信息 /// /// 获取文件列表 /// /// ftp目录路径 /// 0 failed 1 success ///
文件名称列表
public IList
GetFileList(string path, out string info) { return GetFTPPathList(path, "file", out info); } ///
/// 获取目录的列表 /// ///
ftp目录路径 ///
0 failed 1 success ///
目录的列表
public IList
GetFolderList(string path, out string info) { return GetFTPPathList(path, "folder", out info); } ///
/// 获取FTP
下的所有内容 ///
///
Ftp路径 ///
0/file is File 1/Folder is Folder ///
0 failed 1 success ///
文件或文件夹列表
public IList
GetFTPPathList(string path, string getType, out string info) { IList
fileList = new List
(); // if (!Connect(path)) { info = "0"; return fileList; } try { reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails; WebResponse response = reqFTP.GetResponse(); StreamReader reader = new StreamReader (response.GetResponseStream(), System.Text.Encoding.Default); string line = reader.ReadLine(); while (line != null) { if (!string.IsNullOrEmpty(line)) { bool flag;//ture is folder false is file string value = GetListInfo(line, out flag); if (flag == (getType == "1" || getType.Trim().ToLower() == "folder")) fileList.Add(value); } line = reader.ReadLine(); } // to remove the trailing '/n' DisConnect(); reader.Close(); response.Close(); info = "1"; return fileList; } catch (Exception ex) { //System.Windows.Forms.MessageBox.Show(ex.Message); ErrorNotify("路径不存在\r\n" + ex.Message, "获取文件夹"); fileList = new List
(); info = "0"; DisConnect(); return fileList; } } ///
/// 处理得到的信息流,判断是文件还是文件夹 /// ///
///
///
private string GetListInfo(string line, out bool isfloder) { string processstr = line.Trim(); string dateStr = processstr.Substring(0, 8); processstr = (processstr.Substring(8, processstr.Length - 8)).Trim(); string timeStr = processstr.Substring(0, 7); processstr = (processstr.Substring(7, processstr.Length - 7)).Trim(); DateTimeFormatInfo myDTFI = new CultureInfo("en-US", false).DateTimeFormat; myDTFI.ShortTimePattern = "t"; DateTime CreateTime = DateTime.Parse(dateStr + " " + timeStr, myDTFI); if (processstr.Substring(0, 5) == "
") { isfloder = true; processstr = (processstr.Substring(5, processstr.Length - 5)).Trim(); return processstr; } else { isfloder = false; int idx = processstr.IndexOf(" "); processstr = processstr.Substring(idx, processstr.Length - idx).Trim(); //string[] strs = processstr.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);  // true);      //processstr = strs[1]; return processstr; } } #endregion #region 文件操作 ///
/// 上传文件 /// ///
文件上传到的ftp路径 ///
源文件地址 ///
ftp中此文件的名称 ///
是否成功
public bool UploadFile(string path, string oriFilePath, string ftpFileName) { string info; if (ExistFile(path, ftpFileName, out info)) { info = "0"; ErrorNotify("文件已存在,请重新命名文件!", "上传文件"); return false; } else { if (info != "1") return false; } FileInfo fileInf = new FileInfo(oriFilePath); //上传文件路径名称 string ftpFilePath = (path.EndsWith("/") ? path : path + "/") + ftpFileName; // if (!Connect(ftpFilePath)) { info = "0"; return false; } 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(); DisConnect(); info = "1"; return true; } catch (Exception ex) { ErrorNotify(ex.Message, "上传文件"); info = "0"; DisConnect(); return false; } } ///
/// 上传文件 /// ///
文件上传到的ftp路径 ///
源文件地址 ///
是否成功
public bool UploadFile(string path, string oriFilePath) { string ftpFileName = System.IO.Path.GetFileName(oriFilePath); return UploadFile(path, oriFilePath, ftpFileName); } ///
/// 删除文件 /// ///
///
public bool DeleteFile(string filePath) { if (!Connect(filePath)) { return false; } try { 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(); DisConnect(); return true; } catch (Exception ex) { ErrorNotify("删除文件失败!\r\n" + ex.Message, "删除文件"); DisConnect(); return false; } } ///
/// 下载文件 /// ///
ftp中文件的路径,包含文件名 ///
保存下载文件的路径 ///
public bool DownLoadFile(string ftpFilePath, string savePath) { string fileName = System.IO.Path.GetFileName(ftpFilePath); return DownLoadFile(ftpFilePath, savePath, fileName); } ///
/// /// ///
ftp中文件的路径,包含文件名 ///
保存下载文件的路径 ///
保存文件的名称 ///
public bool DownLoadFile(string ftpFilePath, string savePath, string downloadFileName) { if (!Connect(ftpFilePath)) { return false; } FileStream outputStream=null;// = new FileStream(savePath + "\\" + downloadFileName, FileMode.Create); try { outputStream = new FileStream(savePath + "\\" + downloadFileName, FileMode.Create); reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; reqFTP.UseBinary = true; 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(); DisConnect(); return true; } catch (Exception ex) { if (outputStream != null) { outputStream.Close(); if (File.Exists(savePath + "\\" + downloadFileName)) File.Delete(savePath + "\\" + downloadFileName); } ErrorNotify("下载文件失败!\r\n" + ex.Message, "下载文件"); DisConnect(); return false; } } #endregion #region 创建目录 ///
/// 创建目录 /// ///
当前FTP目录 ///
文件夹名称 ///
public bool CreateFolder(string path, string folderName) { string info; if (ExistFolder(path, folderName, out info)) { info = "1"; ErrorNotify("文件夹已存在!", "创建文件夹"); return true; } else { if (info != "1") return false; } // string ftpFolderpath = (path.EndsWith("/") ? path : path + "/") + folderName; // if (!Connect(ftpFolderpath)) { info = "0"; return false; } try { reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory; reqFTP.UseBinary = true; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); Stream ftpStream = response.GetResponseStream(); // ftpStream.Close(); response.Close(); info = "1"; DisConnect(); return true; } catch (Exception e1) { ErrorNotify(e1.Message, "创建文件夹"); info = "0"; DisConnect(); return false; } } ///
/// 创建目录 /// ///
FTP目录 ///
public bool CreateFolder(string folderPath) { int idx = folderPath.LastIndexOf("/"); string path = folderPath.Substring(0, idx); string folderName = folderPath.Substring(idx, folderPath.Length - idx); return CreateFolder(path, folderName); } public bool DeleteFolder(string ftpPath) { if (ftpPath == ftpRootURI) { ErrorNotify("FTP根目录无法删除!", "删除文件夹"); return false; } //遍历所有的子文件夹 string info; IList
folderList = GetFolderList(ftpPath, out info); if (info == "1") { foreach (string folderName in folderList) { string newPath = (ftpPath.EndsWith("/") ? ftpPath : ftpPath + "/") + folderName; if (!DeleteFolder(newPath)) return false; } } else//连接出错 return false; //删除当前目录下的文件 IList
fileList = GetFileList(ftpPath, out info); if (info == "1") { foreach (string fileName in fileList) if (!DeleteFile((ftpPath.EndsWith("/") ? ftpPath : ftpPath + "/") + fileName)) return false; } else return false; //删除自己 return DeleteOnlyFolder(ftpPath); } ///
/// 只删除文件夹 /// ///
///
private bool DeleteOnlyFolder(string ftpPath) { if (!Connect(ftpPath)) { return false; } try { reqFTP.UseBinary = true; //reqFTP.UsePassive = false; reqFTP.KeepAlive = false; reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); response.Close(); DisConnect(); return true; } catch (Exception ex) { ErrorNotify("删除文件夹失败!\r\n" + ex.Message, "删除文件夹"); DisConnect(); return false; } } #endregion ///
/// 重命名文件名或文件夹名称 /// ///
///
新的文件名或文件夹名称 public bool ReName(string currentFtpFilePath, string newFilename) { if (!Connect(currentFtpFilePath)) { return false; } try { reqFTP.Method = WebRequestMethods.Ftp.Rename; reqFTP.RenameTo = newFilename; reqFTP.UseBinary = true; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); Stream ftpStream = response.GetResponseStream(); ftpStream.Close(); response.Close(); DisConnect(); return true; } catch (Exception ex) { ErrorNotify("重命名失败!\r\n" + ex.Message, "重命名"); DisConnect(); return false; } } #endregion #region IDisposable 成员 public void Dispose() { if (reqFTP != null) reqFTP.Abort(); } #endregion }

 

 

转载地址:http://wcazx.baihongyu.com/

你可能感兴趣的文章
DNS显性+隐性URL转发原理
查看>>
我的友情链接
查看>>
网易有道 IP地址、手机号码归属地和身份证 查询接口API
查看>>
鼠标停留在GridView某一行时行的颜色改变
查看>>
系列3:WAS Liberty Profile hello mysql jdbc
查看>>
基础知识:python模块的导入
查看>>
Android MVC之我的实现
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
关于批处理-1
查看>>
Tomcat部署Web应用方法总结
查看>>
Python3 django2.0 字段加密 解密 AES
查看>>
CCNA实验之:网络地址转换(NAT)实验
查看>>
计算机网络原理笔记-停止等待协议
查看>>
确定当前记录和下一条记录之间相差的天数
查看>>
sql语句返回主键SCOPE_IDENTITY()
查看>>
机器学习开源项目精选TOP30
查看>>
/etc/resolv.conf文件详解
查看>>
【转】VC的MFC中重绘函数的使用总结(整理)
查看>>
JQuery日记_5.13 Sizzle选择器(六)选择器的效率
查看>>