首页 后端开发 C#.Net教程 【C#】FtpHelper对服务器文件实现读写操作的实例详解

【C#】FtpHelper对服务器文件实现读写操作的实例详解

Apr 22, 2017 am 10:52 AM
ftp 文件读写

这篇文章主要为大家详细介绍了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:ZOina2017@192.168.10.17/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对服务器文件实现读写操作的实例详解的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1672
14
CakePHP 教程
1428
52
Laravel 教程
1332
25
PHP教程
1276
29
C# 教程
1256
24
nginx反向代理ftp服务器怎么搭建 nginx反向代理ftp服务器怎么搭建 May 17, 2023 am 09:31 AM

1.安装nginx2.安装vsftpd3.修改nginx的配置文件nginx.conf  3.1首行添加ftp的用户  userftpuser;  3.2配置相关路径  server{    listen80;  #nginx代理的端口    server_namelocalhost;  #ftp服务器的地址    location/images{      root/home/ftpuser;  #代理ftp服务器的文件夹的绝对路径    indexftpuser;    #设置欢迎页    

在Go语言中使用FTP:完整指南 在Go语言中使用FTP:完整指南 Jun 17, 2023 pm 06:31 PM

随着互联网的快速发展,文件传输协议(FTP)一直是一种重要的文件传送方式。在Go语言中,使用FTP传输文件可能是很多开发人员的需求。然而,也许很多人并不知道如何在Go语言中使用FTP。在本篇文章中,我们将探讨如何在Go语言中使用FTP,从连接FTP服务器到文件传输,以及如何处理错误和异常。创建FTP连接在Go语言中,我们可以使用标准的"net"包来连接FTP

PHP与FTP:在网站开发中实现多个部门的文件共享 PHP与FTP:在网站开发中实现多个部门的文件共享 Jul 28, 2023 pm 01:01 PM

PHP与FTP:在网站开发中实现多个部门的文件共享随着互联网的发展,越来越多的企业开始借助网站平台进行信息发布和业务推广。然而,随之而来的问题是如何实现多个部门之间的文件共享和协作。在这种情况下,PHP和FTP成为了最常用的解决方案之一。本文将介绍如何利用PHP和FTP在网站开发中实现多个部门的文件共享。一、FTP介绍FTP(FileTransferPr

linux下 ftp命令有哪些 linux下 ftp命令有哪些 Mar 21, 2023 am 09:59 AM

linux下ftp命令有:1、ftp命令;2、close命令;3、disconnect命令;4、open命令;5、user命令;6、account命令;7、bye命令;8、quit命令;9、help命令;10、rhelp命令;11、ascii命令;12、binary/bi命令;13、bell命令等。

linux ftp 530什么意思 linux ftp 530什么意思 Mar 14, 2023 am 10:16 AM

linux ftp530的意思是linux ftp登录报错530,其解决办法:1、​查看“cat /etc/shells”是否有你用户的主目录和登录shell,若是没有,则进行添加;2、查看“/var/log/secure”文件,重新设置密码过期时间即可。

如何用PHP实现FTP文件上传进度条 如何用PHP实现FTP文件上传进度条 Jul 30, 2023 pm 06:51 PM

如何用PHP实现FTP文件上传进度条一、背景介绍在网站开发中,文件上传是一个常见的功能。而对于大文件的上传,为了提高用户体验,我们常常需要给用户显示一个上传进度条,让用户知道文件上传的进程。本文将介绍如何使用PHP实现FTP文件上传进度条的功能。二、FTP文件上传进度条的实现方法基本思路FTP文件上传的进度条实现,通常是通过计算上传的文件大小和已上传文件大小

如何通过PHP在FTP服务器上进行目录和文件的比较 如何通过PHP在FTP服务器上进行目录和文件的比较 Jul 28, 2023 pm 02:09 PM

如何通过PHP在FTP服务器上进行目录和文件的比较在web开发中,有时候我们需要比较本地文件与FTP服务器上的文件,以确保两者之间的一致性。PHP提供了一些函数和类来实现这个功能。本文将介绍如何使用PHP在FTP服务器上进行目录和文件的比较,并提供相关的代码示例。首先,我们需要连接到FTP服务器。PHP提供了ftp_connect()函数来建立与FTP服务器

如何在 Golang 中使用管道实现文件读写? 如何在 Golang 中使用管道实现文件读写? Jun 04, 2024 am 10:22 AM

通过管道进行文件读写:创建一个管道从文件读取数据并通过管道传递从管道中接收数据并处理将处理后的数据写入文件使用goroutine并发执行这些操作以提高性能

See all articles