- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.NET;
- using System.IO;
- using System.Threading;
- namespace ftp
- {
- public class FtpHelper
- {
- // 基本设置
- static private string path = @"ftp://" + "SDSDBT16B" + "/"; // 目标路径
- static private string ftpip = "SDSDBT16B"; //ftp IP 地址
- static private string username = "Jinwei"; //ftp 用户名
- static private string password ="QSMC+12345"; //ftp 密码
- // 获取 ftp 上面的文件和文件夹
- public static string[] GetFileList(string dir)
- {
- string[] downloadFiles;
- StringBuilder result = new StringBuilder();
- FtpWebRequest request;
- try
- {
- 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">目标文件夹: 服务器下的相对路径 不填为根目录 相对路径不加 ftp://IP 的例如 / ff/ss/</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;
- }
- }
- }
来源: http://www.bubuko.com/infodetail-3012166.html