| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Net;
- using System.Text;
- using System.Web;
- /// <summary>
- /// FTPHelper 的摘要说明
- /// </summary>
- public class FTPHelper
- {
- //基本设置
- static private string path = @"ftp://" + Configs.GetValue("ftp") + "/"; //目标路径
- static private string ftpip = Configs.GetValue("ftp"); //ftp IP地址
- static private string username = Configs.GetValue("account"); //ftp用户名
- static private string password = Configs.GetValue("password"); //ftp密码
- //获取ftp上面的文件和文件夹
- public static string[] GetFileList(string dir)
- {
- string[] downloadFiles;
- StringBuilder result = new StringBuilder();
- FtpWebRequest request;
- try
- {
- path = @"ftp://" + Configs.GetValue("ftp") + "/";
- if (!string.IsNullOrEmpty(dir))
- path = path + dir + "/";
- request = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));
- request.UseBinary = true;
- request.Credentials = new NetworkCredential(username, password);//设置用户名和密码
- request.Method = WebRequestMethods.Ftp.ListDirectory;
- request.UseBinary = true;
- WebResponse response = request.GetResponse();
- StreamReader reader = new StreamReader(response.GetResponseStream());
- string line = reader.ReadLine();
- while (line != null)
- {
- result.Append(line);
- result.Append("\n");
- Console.WriteLine(line);
- line = reader.ReadLine();
- }
- // to remove the trailing '\n'
- result.Remove(result.ToString().LastIndexOf('\n'), 1);
- reader.Close();
- response.Close();
- return result.ToString().Split('\n');
- }
- catch (Exception ex)
- {
- Console.WriteLine("获取ftp上面的文件和文件夹:" + ex.Message);
- downloadFiles = null;
- return downloadFiles;
- }
- }
- /// <summary>
- /// 获取文件大小
- /// </summary>
- /// <param name="file">ip服务器下的相对路径</param>
- /// <returns>文件大小</returns>
- public static int GetFileSize(string file)
- {
- StringBuilder result = new StringBuilder();
- FtpWebRequest request;
- try
- {
- request = (FtpWebRequest)FtpWebRequest.Create(new Uri(path + file));
- request.UseBinary = true;
- request.Credentials = new NetworkCredential(username, password);//设置用户名和密码
- request.Method = WebRequestMethods.Ftp.GetFileSize;
- int dataLength = (int)request.GetResponse().ContentLength;
- return dataLength;
- }
- catch (Exception ex)
- {
- Console.WriteLine("获取文件大小出错:" + ex.Message);
- return -1;
- }
- }
- /// <summary>
- /// 文件上传
- /// </summary>
- /// <param name="filePath">原路径(绝对路径)包括文件名</param>
- /// <param name="objPath">目标文件夹:服务器下的相对路径 不填为根目录</param>
- public static void FileUpLoad(string filePath, string objPath)
- {
- try
- {
- string url = path;
- if (objPath != "")
- url += objPath + "/";
- try
- {
- FtpWebRequest reqFTP = null;
- //待上传的文件 (全路径)
- try
- {
- FileInfo fileInfo = new FileInfo(filePath);
- using (FileStream fs = fileInfo.OpenRead())
- {
- long length = fs.Length;
- reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url + fileInfo.Name));
- //设置连接到FTP的帐号密码
- reqFTP.Credentials = new NetworkCredential(username, password);
- //设置请求完成后是否保持连接
- reqFTP.KeepAlive = false;
- //指定执行命令
- reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
- //指定数据传输类型
- reqFTP.UseBinary = true;
- using (Stream stream = reqFTP.GetRequestStream())
- {
- //设置缓冲大小
- int BufferLength = 5120;
- byte[] b = new byte[BufferLength];
- int i;
- while ((i = fs.Read(b, 0, BufferLength)) > 0)
- {
- stream.Write(b, 0, i);
- }
- Console.WriteLine("上传文件成功");
- }
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine("上传文件失败错误为" + ex.Message);
- }
- finally
- {
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine("上传文件失败错误为" + ex.Message);
- }
- finally
- {
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine("上传文件失败错误为" + ex.Message);
- }
- }
- /// <summary>
- /// 删除文件
- /// </summary>
- /// <param name="fileName">服务器下的相对路径 包括文件名</param>
- public static void DeleteFileName(string fileName)
- {
- try
- {
- FileInfo fileInf = new FileInfo(ftpip + "" + fileName);
- string uri = path + fileName;
- FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
- // 指定数据传输类型
- reqFTP.UseBinary = true;
- // ftp用户名和密码
- reqFTP.Credentials = new NetworkCredential(username, password);
- // 默认为true,连接不会被关闭
- // 在一个命令之后被执行
- reqFTP.KeepAlive = false;
- // 指定执行什么命令
- reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
- FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
- response.Close();
- }
- catch (Exception ex)
- {
- Console.WriteLine("删除文件出错:" + ex.Message);
- }
- }
- /// <summary>
- /// 新建目录 上一级必须先存在
- /// </summary>
- /// <param name="dirName">服务器下的相对路径</param>
- public static void MakeDir(string dirName)
- {
- try
- {
- string uri = path + dirName;
- FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
- // 指定数据传输类型
- reqFTP.UseBinary = true;
- // ftp用户名和密码
- reqFTP.Credentials = new NetworkCredential(username, password);
- reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
- FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
- response.Close();
- }
- catch (Exception ex)
- {
- Console.WriteLine("创建目录出错:" + ex.Message);
- }
- }
- /// <summary>
- /// 删除目录 上一级必须先存在
- /// </summary>
- /// <param name="dirName">服务器下的相对路径</param>
- public static void DelDir(string dirName)
- {
- try
- {
- string uri = path + dirName;
- FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
- // ftp用户名和密码
- reqFTP.Credentials = new NetworkCredential(username, password);
- reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;
- FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
- response.Close();
- }
- catch (Exception ex)
- {
- Console.WriteLine("删除目录出错:" + ex.Message);
- }
- }
- /// <summary>
- /// 从ftp服务器上获得文件夹列表
- /// </summary>
- /// <param name="RequedstPath">服务器下的相对路径</param>
- /// <returns></returns>
- public static List<string> GetDirctory(string RequedstPath)
- {
- List<string> strs = new List<string>();
- try
- {
- string uri = path + RequedstPath; //目标路径 path为服务器地址
- FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
- // ftp用户名和密码
- reqFTP.Credentials = new NetworkCredential(username, password);
- reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
- WebResponse response = reqFTP.GetResponse();
- StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名
- string line = reader.ReadLine();
- while (line != null)
- {
- if (line.Contains("<DIR>"))
- {
- string msg = line.Substring(line.LastIndexOf("<DIR>") + 5).Trim();
- strs.Add(msg);
- }
- line = reader.ReadLine();
- }
- reader.Close();
- response.Close();
- return strs;
- }
- catch (Exception ex)
- {
- Console.WriteLine("获取目录出错:" + ex.Message);
- }
- return strs;
- }
- /// <summary>
- /// 从ftp服务器上获得文件列表
- /// </summary>
- /// <param name="RequedstPath">服务器下的相对路径</param>
- /// <returns></returns>
- public static List<string> GetFile(string RequedstPath)
- {
- List<string> strs = new List<string>();
- try
- {
- string uri = path + RequedstPath; //目标路径 path为服务器地址
- FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
- // ftp用户名和密码
- reqFTP.Credentials = new NetworkCredential(username, password);
- reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
- WebResponse response = reqFTP.GetResponse();
- StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名
- string line = reader.ReadLine();
- while (line != null)
- {
- if (!line.Contains("<DIR>"))
- {
- string msg = line.Substring(39).Trim();
- strs.Add(msg);
- }
- line = reader.ReadLine();
- }
- reader.Close();
- response.Close();
- return strs;
- }
- catch (Exception ex)
- {
- Console.WriteLine("获取文件出错:" + ex.Message);
- }
- return strs;
- }
- }
|