[C#] C#自定义FTP访问类 →→→→→进入此内容的聊天室

来自 , 2021-01-23, 写在 C#, 查看 128 次.
URL http://www.code666.cn/view/f52b43f6
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4. using System.IO;  
  5. using System.Net;
  6. using System.Text.RegularExpressions;
  7.  
  8. namespace DotNet.Utilities
  9. {
  10.     public class FTPHelper
  11.     {
  12.         #region 字段
  13.         string ftpURI;
  14.         string ftpUserID;
  15.         string ftpServerIP;
  16.         string ftpPassword;
  17.         string ftpRemotePath;
  18.         #endregion
  19.  
  20.         /// <summary>  
  21.         /// 连接FTP服务器
  22.         /// </summary>  
  23.         /// <param name="FtpServerIP">FTP连接地址</param>  
  24.         /// <param name="FtpRemotePath">指定FTP连接成功后的当前目录, 如果不指定即默认为根目录</param>  
  25.         /// <param name="FtpUserID">用户名</param>  
  26.         /// <param name="FtpPassword">密码</param>  
  27.         public FTPHelper(string FtpServerIP, string FtpRemotePath, string FtpUserID, string FtpPassword)
  28.         {
  29.             ftpServerIP = FtpServerIP;
  30.             ftpRemotePath = FtpRemotePath;
  31.             ftpUserID = FtpUserID;
  32.             ftpPassword = FtpPassword;
  33.             ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";
  34.         }
  35.  
  36.         /// <summary>  
  37.         /// 上传  
  38.         /// </summary>  
  39.         public void Upload(string filename)
  40.         {
  41.             FileInfo fileInf = new FileInfo(filename);
  42.             FtpWebRequest reqFTP;
  43.             reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileInf.Name));
  44.             reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
  45.             reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
  46.             reqFTP.KeepAlive = false;
  47.             reqFTP.UseBinary = true;
  48.             reqFTP.ContentLength = fileInf.Length;
  49.             int buffLength = 2048;
  50.             byte[] buff = new byte[buffLength];
  51.             int contentLen;
  52.             FileStream fs = fileInf.OpenRead();
  53.             try
  54.             {
  55.                 Stream strm = reqFTP.GetRequestStream();
  56.                 contentLen = fs.Read(buff, 0, buffLength);
  57.                 while (contentLen != 0)
  58.                 {
  59.                     strm.Write(buff, 0, contentLen);
  60.                     contentLen = fs.Read(buff, 0, buffLength);
  61.                 }
  62.                 strm.Close();
  63.                 fs.Close();
  64.             }
  65.             catch (Exception ex)
  66.             {
  67.                 throw new Exception(ex.Message);
  68.             }
  69.         }
  70.  
  71.         /// <summary>  
  72.         /// 下载  
  73.         /// </summary>  
  74.         public void Download(string filePath, string fileName)
  75.         {
  76.             try
  77.             {
  78.                 FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);
  79.                 FtpWebRequest reqFTP;
  80.                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileName));
  81.                 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
  82.                 reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
  83.                 reqFTP.UseBinary = true;
  84.                 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
  85.                 Stream ftpStream = response.GetResponseStream();
  86.                 long cl = response.ContentLength;
  87.                 int bufferSize = 2048;
  88.                 int readCount;
  89.                 byte[] buffer = new byte[bufferSize];
  90.                 readCount = ftpStream.Read(buffer, 0, bufferSize);
  91.                 while (readCount > 0)
  92.                 {
  93.                     outputStream.Write(buffer, 0, readCount);
  94.                     readCount = ftpStream.Read(buffer, 0, bufferSize);
  95.                 }
  96.                 ftpStream.Close();
  97.                 outputStream.Close();
  98.                 response.Close();
  99.             }
  100.             catch (Exception ex)
  101.             {
  102.                 throw new Exception(ex.Message);
  103.             }
  104.         }
  105.  
  106.         /// <summary>  
  107.         /// 删除文件  
  108.         /// </summary>  
  109.         public void Delete(string fileName)
  110.         {
  111.             try
  112.             {
  113.                 FtpWebRequest reqFTP;
  114.                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileName));
  115.                 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
  116.                 reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
  117.                 reqFTP.KeepAlive = false;
  118.                 string result = String.Empty;
  119.                 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
  120.                 long size = response.ContentLength;
  121.                 Stream datastream = response.GetResponseStream();
  122.                 StreamReader sr = new StreamReader(datastream);
  123.                 result = sr.ReadToEnd();
  124.                 sr.Close();
  125.                 datastream.Close();
  126.                 response.Close();
  127.             }
  128.             catch (Exception ex)
  129.             {
  130.                 throw new Exception(ex.Message);
  131.             }
  132.         }
  133.  
  134.         /// <summary>  
  135.         /// 获取当前目录下明细(包含文件和文件夹)  
  136.         /// </summary>  
  137.         public string[] GetFilesDetailList()
  138.         {
  139.             try
  140.             {
  141.                 StringBuilder result = new StringBuilder();
  142.                 FtpWebRequest ftp;
  143.                 ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));
  144.                 ftp.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
  145.                 ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
  146.                 WebResponse response = ftp.GetResponse();
  147.                 StreamReader reader = new StreamReader(response.GetResponseStream());
  148.                 string line = reader.ReadLine();
  149.                 line = reader.ReadLine();
  150.                 line = reader.ReadLine();
  151.                 while (line != null)
  152.                 {
  153.                     result.Append(line);
  154.                     result.Append("\n");
  155.                     line = reader.ReadLine();
  156.                 }
  157.                 result.Remove(result.ToString().LastIndexOf("\n"), 1);
  158.                 reader.Close();
  159.                 response.Close();
  160.                 return result.ToString().Split('\n');
  161.             }
  162.             catch (Exception ex)
  163.             {
  164.                 throw new Exception(ex.Message);
  165.             }
  166.         }
  167.  
  168.         /// <summary>  
  169.         /// 获取FTP文件列表(包括文件夹)
  170.         /// </summary>  
  171.         private string[] GetAllList(string url)
  172.         {
  173.             List<string> list = new List<string>();
  174.             FtpWebRequest req = (FtpWebRequest)WebRequest.Create(new Uri(url));
  175.             req.Credentials = new NetworkCredential(ftpPassword, ftpPassword);
  176.             req.Method = WebRequestMethods.Ftp.ListDirectory;
  177.             req.UseBinary = true;
  178.             req.UsePassive = true;
  179.             try
  180.             {
  181.                 using (FtpWebResponse res = (FtpWebResponse)req.GetResponse())
  182.                 {
  183.                     using (StreamReader sr = new StreamReader(res.GetResponseStream()))
  184.                     {
  185.                         string s;
  186.                         while ((s = sr.ReadLine()) != null)
  187.                         {
  188.                             list.Add(s);
  189.                         }
  190.                     }
  191.                 }
  192.             }
  193.             catch (Exception ex)
  194.             {
  195.                 throw (ex);
  196.             }
  197.             return list.ToArray();
  198.         }
  199.  
  200.         /// <summary>  
  201.         /// 获取当前目录下文件列表(不包括文件夹)  
  202.         /// </summary>  
  203.         public string[] GetFileList(string url)
  204.         {
  205.             StringBuilder result = new StringBuilder();
  206.             FtpWebRequest reqFTP;
  207.             try
  208.             {
  209.                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));
  210.                 reqFTP.UseBinary = true;
  211.                 reqFTP.Credentials = new NetworkCredential(ftpPassword, ftpPassword);
  212.                 reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
  213.                 WebResponse response = reqFTP.GetResponse();
  214.                 StreamReader reader = new StreamReader(response.GetResponseStream());
  215.                 string line = reader.ReadLine();
  216.                 while (line != null)
  217.                 {
  218.  
  219.                     if (line.IndexOf("<DIR>") == -1)
  220.                     {
  221.                         result.Append(Regex.Match(line, @"[\S]+ [\S]+", RegexOptions.IgnoreCase).Value.Split(' ')[1]);
  222.                         result.Append("\n");
  223.                     }
  224.                     line = reader.ReadLine();
  225.                 }
  226.                 result.Remove(result.ToString().LastIndexOf('\n'), 1);
  227.                 reader.Close();
  228.                 response.Close();
  229.             }
  230.             catch (Exception ex)
  231.             {
  232.                 throw (ex);
  233.             }
  234.             return result.ToString().Split('\n');
  235.         }
  236.  
  237.         /// <summary>  
  238.         /// 判断当前目录下指定的文件是否存在  
  239.         /// </summary>  
  240.         /// <param name="RemoteFileName">远程文件名</param>  
  241.         public bool FileExist(string RemoteFileName)
  242.         {
  243.             string[] fileList = GetFileList("*.*");
  244.             foreach (string str in fileList)
  245.             {
  246.                 if (str.Trim() == RemoteFileName.Trim())
  247.                 {
  248.                     return true;
  249.                 }
  250.             }
  251.             return false;
  252.         }
  253.  
  254.         /// <summary>  
  255.         /// 创建文件夹  
  256.         /// </summary>  
  257.         public void MakeDir(string dirName)
  258.         {
  259.             FtpWebRequest reqFTP;
  260.             try
  261.             {
  262.                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + dirName));
  263.                 reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
  264.                 reqFTP.UseBinary = true;
  265.                 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
  266.                 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
  267.                 Stream ftpStream = response.GetResponseStream();
  268.                 ftpStream.Close();
  269.                 response.Close();
  270.             }
  271.             catch (Exception ex)
  272.             { }
  273.         }
  274.  
  275.         /// <summary>  
  276.         /// 获取指定文件大小  
  277.         /// </summary>  
  278.         public long GetFileSize(string filename)
  279.         {
  280.             FtpWebRequest reqFTP;
  281.             long fileSize = 0;
  282.             try
  283.             {
  284.                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + filename));
  285.                 reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
  286.                 reqFTP.UseBinary = true;
  287.                 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
  288.                 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
  289.                 Stream ftpStream = response.GetResponseStream();
  290.                 fileSize = response.ContentLength;
  291.                 ftpStream.Close();
  292.                 response.Close();
  293.             }
  294.             catch (Exception ex)
  295.             { }
  296.             return fileSize;
  297.         }
  298.  
  299.         /// <summary>  
  300.         /// 更改文件名  
  301.         /// </summary>
  302.         public void ReName(string currentFilename, string newFilename)
  303.         {
  304.             FtpWebRequest reqFTP;
  305.             try
  306.             {
  307.                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + currentFilename));
  308.                 reqFTP.Method = WebRequestMethods.Ftp.Rename;
  309.                 reqFTP.RenameTo = newFilename;
  310.                 reqFTP.UseBinary = true;
  311.                 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
  312.                 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
  313.                 Stream ftpStream = response.GetResponseStream();
  314.                 ftpStream.Close();
  315.                 response.Close();
  316.             }
  317.             catch (Exception ex)
  318.             { }
  319.         }
  320.  
  321.         /// <summary>  
  322.         /// 移动文件  
  323.         /// </summary>  
  324.         public void MovieFile(string currentFilename, string newDirectory)
  325.         {
  326.             ReName(currentFilename, newDirectory);
  327.         }
  328.  
  329.         /// <summary>  
  330.         /// 切换当前目录  
  331.         /// </summary>  
  332.         /// <param name="IsRoot">true:绝对路径 false:相对路径</param>  
  333.         public void GotoDirectory(string DirectoryName, bool IsRoot)
  334.         {
  335.             if (IsRoot)
  336.             {
  337.                 ftpRemotePath = DirectoryName;
  338.             }
  339.             else
  340.             {
  341.                 ftpRemotePath += DirectoryName + "/";
  342.             }
  343.             ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";
  344.         }
  345.     }
  346. }
  347. //csharp/8615

回复 "C#自定义FTP访问类"

这儿你可以回复上面这条便签

captcha