最新公告
  • 欢迎您光临立业阁,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 【C#】FtpHelper对服务器文件实现读写操作的实例详解_C#教程


    这篇文章主要为大家详细介绍了FtpHelper实现ftp服务器文件读写操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     using System.Net;
     using System.IO;
     using System.Threading;
    using System.Configuration;
     
     namespace FtpSyn
     {
       public class FtpHelper
       {
         //基本设置 ftp://400:[email protected]/400backup
         static private string path = @"ftp://" + ConfigurationManager.AppSettings["FtpServerIP"].ToString() + "/";  //目标路径
         static private string ftpip = ConfigurationManager.AppSettings["FtpServerIP"].ToString();  //ftp IP地址
         static private string username = ConfigurationManager.AppSettings["FtpUserName"].ToString();  //ftp用户名
         static private string password = ConfigurationManager.AppSettings["FtpPassWord"].ToString();  //ftp密码
        
         //获取ftp上面的文件和文件夹
         public static string[] GetFileList(string dir)
         {
           string[] downloadFiles;
           StringBuilder result = new StringBuilder();
           FtpWebRequest request;
           try
           {
             request = (FtpWebRequest)FtpWebRequest.Create(new Uri(path + dir));
             request.UseBinary = true;
             request.Credentials = new NetworkCredential(username, password);//设置用户名和密码
             request.Method = WebRequestMethods.Ftp.ListDirectory;
             request.UseBinary = true;
             request.UsePassive = false; //选择主动还是被动模式 , 这句要加上的。
             request.KeepAlive = false;//一定要设置此属性,否则一次性下载多个文件的时候,会出现异常。
             WebResponse response = request.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)
           {
             LogHelper.writeErrorLog("获取ftp上面的文件和文件夹:" + ex.Message);
             downloadFiles = null;
             return downloadFiles;
           }
         }
     
         /// <summary>
         /// 从ftp服务器上获取文件并将内容全部转换成string返回
         /// </summary>
         /// <param name="fileName"></param>
         /// <param name="dir"></param>
         /// <returns></returns>
         public static string GetFileStr(string fileName, string dir)
         {
           FtpWebRequest reqFTP;
           try
           {
             reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path + dir + "/" + fileName));
             reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
             reqFTP.UseBinary = true;
             reqFTP.Credentials = new NetworkCredential(username, password);
             reqFTP.UsePassive = false; //选择主动还是被动模式 , 这句要加上的。
             reqFTP.KeepAlive = false;//一定要设置此属性,否则一次性下载多个文件的时候,会出现异常。
             FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
             Stream ftpStream = response.GetResponseStream();
             StreamReader reader = new StreamReader(ftpStream);
             string fileStr = reader.ReadToEnd();
     
             reader.Close();
             ftpStream.Close();
             response.Close();
             return fileStr;
           }
           catch (Exception ex)
           {
             LogHelper.writeErrorLog("获取ftp文件并读取内容失败:" + ex.Message);
             return null;
           }
         } 
     
         /// <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;
         }
       
       }
     }

    以上就是【C#】FtpHelper对服务器文件实现读写操作的实例详解的详细内容,更多请关注liyege.cn其它相关文章!

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    • 1165会员总数(位)
    • 111858资源总数(个)
    • 8本周发布(个)
    • 0 今日发布(个)
    • 242稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情
    冀ICP备19022365号-1 百度地图

    [email protected]

    立业阁(www.liyege.cn)免费提供wordpress主题模板、dedecms模板、帝国cms模板、小说网站源码、电影网站源码以及网络技术分享,建站源码,小说模板,电影模板,网赚教程,VPS推荐