[C#] C# FTP操作类 →→→→→进入此内容的聊天室

来自 , 2021-04-12, 写在 C#, 查看 170 次.
URL http://www.code666.cn/view/29a9f8c8
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Net;
  5. using System.IO;
  6.  
  7. namespace Utility
  8. {
  9.     public class FtpUpDown
  10.     {
  11.  
  12.         string ftpServerIP;
  13.  
  14.         string ftpUserID;
  15.  
  16.         string ftpPassword;
  17.  
  18.         FtpWebRequest reqFTP;
  19.  
  20.         private void Connect(String path)//连接ftp
  21.         {
  22.  
  23.             // 根据uri创建FtpWebRequest对象
  24.  
  25.             reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));
  26.  
  27.             // 指定数据传输类型
  28.  
  29.             reqFTP.UseBinary = true;
  30.  
  31.             // ftp用户名和密码
  32.  
  33.             reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
  34.  
  35.         }
  36.  
  37.         public FtpUpDown(string ftpServerIP, string ftpUserID, string ftpPassword)
  38.         {
  39.             this.ftpServerIP = ftpServerIP;
  40.  
  41.             this.ftpUserID = ftpUserID;
  42.  
  43.             this.ftpPassword = ftpPassword;
  44.         }
  45.  
  46.         //都调用这个
  47.  
  48.         private string[] GetFileList(string path, string WRMethods)//上面的代码示例了如何从ftp服务器上获得文件列表
  49.         {
  50.             string[] downloadFiles;
  51.             StringBuilder result = new StringBuilder();
  52.             try
  53.             {
  54.                 Connect(path);
  55.  
  56.                 reqFTP.Method = WRMethods;
  57.  
  58.                 WebResponse response = reqFTP.GetResponse();
  59.  
  60.                 StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);//中文文件名
  61.  
  62.                 string line = reader.ReadLine();
  63.  
  64.                 while (line != null)
  65.                 {
  66.  
  67.                     result.Append(line);
  68.  
  69.                     result.Append("\n");
  70.  
  71.                     line = reader.ReadLine();
  72.  
  73.                 }
  74.  
  75.                 // to remove the trailing '\n'
  76.  
  77.                 result.Remove(result.ToString().LastIndexOf('\n'), 1);
  78.  
  79.                 reader.Close();
  80.  
  81.                 response.Close();
  82.  
  83.                 return result.ToString().Split('\n');
  84.  
  85.             }
  86.  
  87.             catch (Exception ex)
  88.             {
  89.                 Log.WriteError("Get FileList Error:" + ex.Message);
  90.                 downloadFiles = null;
  91.  
  92.                 return downloadFiles;
  93.             }
  94.         }
  95.  
  96.         public string[] GetFileList(string path)//上面的代码示例了如何从ftp服务器上获得文件列表
  97.         {
  98.             return GetFileList("ftp://" + ftpServerIP + "/" + path, WebRequestMethods.Ftp.ListDirectory);
  99.         }
  100.         public string[] GetFileList()//上面的代码示例了如何从ftp服务器上获得文件列表
  101.         {
  102.             return GetFileList("ftp://" + ftpServerIP + "/", WebRequestMethods.Ftp.ListDirectory);
  103.         }
  104.  
  105.         public void Upload(string filename) //上面的代码实现了从ftp服务器上载文件的功能
  106.         {
  107.             FileInfo fileInf = new FileInfo(filename);
  108.  
  109.             string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
  110.  
  111.             Connect(uri);//连接        
  112.  
  113.             // 默认为true,连接不会被关闭
  114.  
  115.             // 在一个命令之后被执行
  116.  
  117.             reqFTP.KeepAlive = false;
  118.  
  119.             // 指定执行什么命令
  120.  
  121.             reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
  122.  
  123.             // 上传文件时通知服务器文件的大小
  124.  
  125.             reqFTP.ContentLength = fileInf.Length;
  126.             // 缓冲大小设置为kb
  127.             int buffLength = 2048;
  128.             byte[] buff = new byte[buffLength];
  129.  
  130.             int contentLen;
  131.  
  132.             // 打开一个文件流(System.IO.FileStream) 去读上传的文件
  133.  
  134.             FileStream fs = fileInf.OpenRead();
  135.  
  136.             try
  137.             {
  138.  
  139.                 // 把上传的文件写入流
  140.  
  141.                 Stream strm = reqFTP.GetRequestStream();
  142.  
  143.                 // 每次读文件流的kb
  144.  
  145.                 contentLen = fs.Read(buff, 0, buffLength);
  146.  
  147.                 // 流内容没有结束
  148.  
  149.                 while (contentLen != 0)
  150.                 {
  151.                     // 把内容从file stream 写入upload stream
  152.                     strm.Write(buff, 0, contentLen);
  153.                     contentLen = fs.Read(buff, 0, buffLength);
  154.  
  155.                 }
  156.  
  157.                 // 关闭两个流
  158.  
  159.                 strm.Close();
  160.  
  161.                 fs.Close();
  162.  
  163.             }
  164.  
  165.             catch (Exception ex)
  166.             {
  167.                  Log.WriteError( "Upload Error:" + ex.Message);
  168.             }
  169.  
  170.         }
  171.  
  172.         public bool Download(string filePath, string fileName, out string errorinfo)////上面的代码实现了从ftp服务器下载文件的功能
  173.         {
  174.             try
  175.             {
  176.                 String onlyFileName = Path.GetFileName(fileName);
  177.  
  178.                 string newFileName = filePath + "\\" + onlyFileName;
  179.  
  180.                 if (File.Exists(newFileName))
  181.                 {
  182.  
  183.                     errorinfo = string.Format("本地文件{0}已存在,无法下载", newFileName);
  184.                     return false;
  185.                 }
  186.                 string url = "ftp://" + ftpServerIP + "/" + fileName;
  187.                 Connect(url);//连接  
  188.                 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
  189.                 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
  190.                 Stream ftpStream = response.GetResponseStream();
  191.                 long cl = response.ContentLength;
  192.                 int bufferSize = 2048;
  193.                 int readCount;
  194.                 byte[] buffer = new byte[bufferSize];
  195.                 readCount = ftpStream.Read(buffer, 0, bufferSize);
  196.  
  197.                 FileStream outputStream = new FileStream(newFileName, FileMode.Create);
  198.                 while (readCount > 0)
  199.                 {
  200.                     outputStream.Write(buffer, 0, readCount);
  201.                     readCount = ftpStream.Read(buffer, 0, bufferSize);
  202.                 }
  203.                 ftpStream.Close();
  204.                 outputStream.Close();
  205.                 response.Close();
  206.  
  207.                 errorinfo = "";
  208.  
  209.                 return true;
  210.  
  211.             }
  212.  
  213.             catch (Exception ex)
  214.             {
  215.                 errorinfo = string.Format("因{0},无法下载", ex.Message);
  216.  
  217.                 return false;
  218.  
  219.             }
  220.  
  221.         }
  222.  
  223.         //删除文件
  224.  
  225.         public void DeleteFileName(string fileName)
  226.         {
  227.             try
  228.             {
  229.                 FileInfo fileInf = new FileInfo(fileName);
  230.  
  231.                 string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
  232.  
  233.                 Connect(uri);//连接        
  234.  
  235.                 // 默认为true,连接不会被关闭
  236.  
  237.                 // 在一个命令之后被执行
  238.  
  239.                 reqFTP.KeepAlive = false;
  240.  
  241.                 // 指定执行什么命令
  242.  
  243.                 reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
  244.  
  245.                 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
  246.                 response.Close();
  247.  
  248.             }
  249.  
  250.             catch (Exception ex)
  251.             {
  252.                 Log.WriteError("删除错误:" + ex.Message);
  253.             }
  254.  
  255.         }
  256.  
  257.         //创建目录
  258.  
  259.         public void MakeDir(string dirName)
  260.         {
  261.             try
  262.             {
  263.                 string uri = "ftp://" + ftpServerIP + "/" + dirName;
  264.  
  265.                 Connect(uri);//连接    
  266.  
  267.                 reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
  268.  
  269.                 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
  270.  
  271.                 response.Close();
  272.  
  273.             }
  274.  
  275.             catch (Exception ex)
  276.             {
  277.                 Log.WriteError("创建目录错误:" + ex.Message);
  278.             }
  279.  
  280.         }
  281.  
  282.         //删除目录
  283.  
  284.         public void delDir(string dirName)
  285.         {
  286.             try
  287.             {
  288.                 string uri = "ftp://" + ftpServerIP + "/" + dirName;
  289.  
  290.                 Connect(uri);//连接    
  291.  
  292.                 reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;
  293.  
  294.                 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
  295.  
  296.                 response.Close();
  297.  
  298.             }
  299.  
  300.             catch (Exception ex)
  301.             {
  302.                 Log.WriteError("删除目录错误:" + ex.Message);
  303.             }
  304.  
  305.         }
  306.  
  307.         //获得文件大小
  308.  
  309.         public long GetFileSize(string filename)
  310.         {
  311.  
  312.  
  313.  
  314.             long fileSize = 0;
  315.  
  316.             try
  317.             {
  318.  
  319.                 FileInfo fileInf = new FileInfo(filename);
  320.  
  321.                 string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
  322.  
  323.                 Connect(uri);//连接    
  324.  
  325.                 reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
  326.  
  327.                 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
  328.  
  329.                 fileSize = response.ContentLength;
  330.  
  331.                 response.Close();
  332.  
  333.             }
  334.  
  335.             catch (Exception ex)
  336.             {
  337.                 Log.WriteError("获得文件大小错误:" + ex.Message);
  338.             }
  339.  
  340.             return fileSize;
  341.  
  342.         }
  343.  
  344.         //文件改名
  345.  
  346.         public void Rename(string currentFilename, string newFilename)
  347.         {
  348.             try
  349.             {
  350.                 FileInfo fileInf = new FileInfo(currentFilename);
  351.                 string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
  352.                 Connect(uri);//连接
  353.                 reqFTP.Method = WebRequestMethods.Ftp.Rename;
  354.                 reqFTP.RenameTo = newFilename;
  355.                 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
  356.                 response.Close();
  357.  
  358.             }
  359.  
  360.             catch (Exception ex)
  361.             {
  362.                 Log.WriteError("文件改名错误:" + ex.Message);
  363.             }
  364.  
  365.         }
  366.         //读取文件
  367.  
  368.         public Stream ReadFile(string fileName)
  369.         {
  370.             try
  371.             {
  372.                 string url = "ftp://" + ftpServerIP + "/" + fileName;
  373.                 Connect(url);//连接  
  374.                 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
  375.                 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
  376.                 Stream ftpStream = response.GetResponseStream();
  377.                 return ftpStream;
  378.             }
  379.  
  380.             catch (Exception ex)
  381.             {
  382.                 Log.WriteError("读取文件错误:" + ex.Message);
  383.                 return null;
  384.             }
  385.  
  386.         }
  387.  
  388.         //获得文件明晰
  389.  
  390.         public string[] GetFilesDetailList()
  391.         {
  392.  
  393.             return GetFileList("ftp://" + ftpServerIP + "/", WebRequestMethods.Ftp.ListDirectoryDetails);
  394.  
  395.         }
  396.  
  397.         //获得文件明晰
  398.  
  399.         public string[] GetFilesDetailList(string path)
  400.         {
  401.  
  402.             return GetFileList("ftp://" + ftpServerIP + "/" + path, WebRequestMethods.Ftp.ListDirectoryDetails);
  403.  
  404.         }
  405.  
  406.         // 文件存在检查
  407.         public bool fileCheckExist(string fileName)
  408.         {
  409.             bool success = false;
  410.             FtpWebResponse response = null;
  411.             StreamReader reader = null;
  412.             try
  413.             {
  414.                 string url = "ftp://" + ftpServerIP + "/" + fileName;
  415.                 Connect(url);//连接  
  416.                 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
  417.                 response = (FtpWebResponse)reqFTP.GetResponse();
  418.                 reader = new StreamReader(response.GetResponseStream());
  419.                 string line = reader.ReadLine();
  420.                 if (line != null)
  421.                 {
  422.                     success = true;
  423.                 }
  424.             }
  425.             catch (Exception)
  426.             {
  427.                 success = false;
  428.             }
  429.             finally
  430.             {
  431.                 if (reader != null)
  432.                 {
  433.                     reader.Close();
  434.                 }
  435.  
  436.                 if (response != null)
  437.                 {
  438.                     response.Close();
  439.                 }
  440.             }
  441.             return success;
  442.         }
  443.     }
  444. }
  445. //csharp/5649

回复 "C# FTP操作类"

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

captcha