using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net; namespace BaseInfo { public enum Ftpud { up = 0, down = 1, }; /// <summary> /// /// </summary> public class ftpOperater { private string ftpServerIP; private string ftpUser; private string ftpPwd; FtpWebRequest reqFTP; public ftpOperater(Ftpud ftpud) { if (ftpud == Ftpud.up) { this.ftpServerIP = G_INI.ReadValue("ftp", "FTP_Up"); } else if (ftpud == Ftpud.down) { this.ftpServerIP = G_INI.ReadValue("ftp", "FTP_Down"); } this.ftpUser = G_INI.ReadValue("ftp", "FTP_USER"); this.ftpPwd = G_INI.ReadValue("ftp", "FTP_PWD"); } /// <summary> /// 连接ftp 上传文件使用 /// </summary> /// <param name="filename">文件名</param> private void Connect(string filename) { // 根据uri创建FtpWebRequest对象 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpServerIP + filename)); // 指定数据传输类型 reqFTP.UseBinary = true; // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(ftpUser, ftpPwd); } /// <summary> /// 获取ftp服务器上的文件信息 /// </summary> /// <returns>存储了所有文件信息的字符串数组</returns> public string[] GetFileList() { string[] downloadFiles; StringBuilder result = new StringBuilder(); try { // 根据uri创建FtpWebRequest对象 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpServerIP)); // 指定数据传输类型 reqFTP.UseBinary = true; // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(ftpUser, ftpPwd); reqFTP.Method = WebRequestMethods.Ftp.ListDirectory; WebResponse response = reqFTP.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream()); 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; return downloadFiles; } } /// <summary> /// 获取FTP上指定文件的大小 /// </summary> /// <param name="filename">文件名</param> /// <returns>文件大小</returns> public long GetFileSize(string filename) { long fileSize = 0; try { // 根据uri创建FtpWebRequest对象 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpServerIP + filename)); // 指定数据传输类型 reqFTP.UseBinary = true; // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(ftpUser, ftpPwd); reqFTP.Method = WebRequestMethods.Ftp.GetFileSize; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); Stream ftpStream = response.GetResponseStream(); fileSize = response.ContentLength; ftpStream.Close(); response.Close(); } catch (Exception ex) { } return fileSize; } /// <summary> /// 实现ftp下载操作 /// </summary> /// <param name="filePath">保存到本地的文件名</param> /// <param name="fileName">远程文件名</param> public bool Download(string filePath, string fileName, out string Errortstr) { Errortstr = ""; try { //filePath = <<The full path where the file is to be created.>>, //fileName = <<Name of the file to be created(Need not be the name of the file on FTP server).>> FileStream outputStream = new FileStream(filePath + fileName, FileMode.Create); // 根据uri创建FtpWebRequest对象 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpServerIP + fileName)); // 指定数据传输类型 reqFTP.UseBinary = true; // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(ftpUser, ftpPwd); reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; 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) { Errortstr = ex.Message; return false; } return true; } /// <summary> /// 从ftp服务器上载文件的功能 /// </summary> /// <param name="filename">本地文件目录</param> public bool Upload(string filename, out string Errortstr) { Errortstr = ""; FileInfo fileInf = new FileInfo(filename); Connect(fileInf.Name);//连接 // 默认为true,连接不会被关闭 // 在一个命令之后被执行 reqFTP.KeepAlive = false; // 指定执行什么命令 reqFTP.Method = WebRequestMethods.Ftp.UploadFile; // 上传文件时通知服务器文件的大小 reqFTP.ContentLength = fileInf.Length; // 缓冲大小设置为kb int buffLength = 2048; byte[] buff = new byte[buffLength]; int contentLen; // 打开一个文件流(System.IO.FileStream) 去读上传的文件 FileStream fs = fileInf.OpenRead(); try { // 把上传的文件写入流 Stream strm = reqFTP.GetRequestStream(); // 每次读文件流的kb contentLen = fs.Read(buff, 0, buffLength); // 流内容没有结束 while (contentLen != 0) { // 把内容从file stream 写入upload stream strm.Write(buff, 0, contentLen); contentLen = fs.Read(buff, 0, buffLength); } // 关闭两个流 strm.Close(); fs.Close(); } catch (Exception ex) { Errortstr = ex.Message; return false; } return true; } /// <summary> /// 删除文件 /// </summary> /// <param name="fileName">文件名称</param> public void DeleteFileName(string fileName) { try { // 根据uri创建FtpWebRequest对象 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpServerIP + fileName)); // 指定数据传输类型 reqFTP.UseBinary = true; // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(ftpUser, ftpPwd); // 默认为true,连接不会被关闭 // 在一个命令之后被执行 reqFTP.KeepAlive = false; // 指定执行什么命令 reqFTP.Method = WebRequestMethods.Ftp.DeleteFile; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); response.Close(); } catch (Exception ex) { } } /// <summary> /// 创建目录 /// </summary> /// <param name="dirName"></param> public void MakeDir(string dirName) { try { // 根据uri创建FtpWebRequest对象 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(dirName)); // 指定数据传输类型 reqFTP.UseBinary = true; // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(ftpUser, ftpPwd); reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); response.Close(); } catch (Exception ex) { } } /// <summary> /// 删除目录 /// </summary> /// <param name="dirName"></param> public void delDir(string dirName) { try { // 根据uri创建FtpWebRequest对象 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(dirName)); // 指定数据传输类型 reqFTP.UseBinary = true; // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(ftpUser, ftpPwd); reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); response.Close(); } catch (Exception ex) { } } /// <summary> /// 文件改名 /// </summary> /// <param name="currentFilename"></param> /// <param name="newFilename"></param> public void Rename(string currentFilename, string newFilename) { try { FileInfo fileInf = new FileInfo(currentFilename); // 根据uri创建FtpWebRequest对象 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpServerIP)); // 指定数据传输类型 reqFTP.UseBinary = true; // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(ftpUser, ftpPwd); reqFTP.Method = WebRequestMethods.Ftp.Rename; reqFTP.RenameTo = newFilename; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); //Stream ftpStream = response.GetResponseStream(); //ftpStream.Close(); response.Close(); } catch (Exception ex) { } } } }
时间: 2024-10-10 05:28:17