栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

FtpHelper实现ftp服务器文件读写操作(C#)

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

FtpHelper实现ftp服务器文件读写操作(C#)

最近做了一个项目,需要读取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;
}
     }
 
 
 
 
     /// 
     /// 从ftp服务器上获取文件并将内容全部转换成string返回
     /// 
     /// 
     /// 
     /// 
     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;
}
     } 
 
 
     /// 
     /// 获取文件大小
     /// 
     /// ip服务器下的相对路径
     /// 文件大小
     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;
}
     }
 
     /// 
     /// 文件上传
     /// 
     /// 原路径(绝对路径)包括文件名
     /// 目标文件夹:服务器下的相对路径 不填为根目录
     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);
}
     }
     
     /// 
     /// 删除文件
     /// 
     /// 服务器下的相对路径 包括文件名
     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);
}
     }
     
     /// 
     /// 新建目录 上一级必须先存在
     /// 
     /// 服务器下的相对路径
     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);
}
     }
     
     /// 
     /// 删除目录 上一级必须先存在
     /// 
     /// 服务器下的相对路径
     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);
}
     }
 
     /// 
     /// 从ftp服务器上获得文件夹列表
     /// 
     /// 服务器下的相对路径
     /// 
     public static List GetDirctory(string RequedstPath)
     {
List strs = new List();
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(""))
    {
      string msg = line.Substring(line.LastIndexOf("")+5).Trim();
      strs.Add(msg);
    }
    line = reader.ReadLine();
  }
  reader.Close();
  response.Close();
  return strs;
}
catch (Exception ex)
{
  Console.WriteLine("获取目录出错:" + ex.Message);
}
return strs;
     }
 
     /// 
     /// 从ftp服务器上获得文件列表
     /// 
     /// 服务器下的相对路径
     /// 
     public static List GetFile(string RequedstPath)
     {
List strs = new List();
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(""))
    {
      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;
     }
   
   }
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/123549.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号