C#操作ftp类完整实例

作者:我心依旧 时间:2021-09-02 22:45:30 

本文实例讲述了C#操作ftp类。分享给大家供大家参考。具体如下:


using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;
using System.Globalization;
namespace FtpTest1
{
public class FtpWeb
{
string ftpServerIP;
string ftpRemotePath;
string ftpUserID;
string ftpPassword;
string ftpURI;
/// <summary>
/// 连接FTP
/// </summary>
/// <param name="FtpServerIP">FTP连接地址</param>
/// <param name="FtpRemotePath">指定FTP连接成功后的当前目录, 如果不指定即默认为根目录</param>
/// <param name="FtpUserID">用户名</param>
/// <param name="FtpPassword">密码</param>
public FtpWeb(string FtpServerIP, string FtpRemotePath, string FtpUserID, string FtpPassword)
{
 ftpServerIP = FtpServerIP;
 ftpRemotePath = FtpRemotePath;
 ftpUserID = FtpUserID;
 ftpPassword = FtpPassword;
 ftpURI = "ftp://" + ftpServerIP + "/" ;
}
static void Main() {
 //string file = "c:\\aq3.gifa";
 //FileInfo fileInf = new FileInfo(file);
 //if (!fileInf.Exists)
 //{
 // Console.WriteLine(file + " no exists");
 //}
 //else {
 // Console.WriteLine("yes");
 //}
 //Console.ReadLine();
 FtpWeb fw = new FtpWeb("121.11.65.10", "", "aa1", "aa");
 string[] filePaths = { "c:\\aq3.gif1", "c:\\aq2.gif1", "c:\\bsmain_runtime.log" };
 Console.WriteLine(fw.UploadFile(filePaths));
 Console.ReadLine();
}
//上传文件
public string UploadFile( string[] filePaths ) {
 StringBuilder sb = new StringBuilder();
 if ( filePaths != null && filePaths.Length > 0 ){
 foreach( var file in filePaths ){
  sb.Append(Upload( file ));
 }
 }
 return sb.ToString();
}
 /// <summary>
/// 上传文件
/// </summary>
/// <param name="filename"></param>
private string Upload(string filename)
{
 FileInfo fileInf = new FileInfo(filename);
 if ( !fileInf.Exists ){
 return filename + " 不存在!\n";
 }
 string uri = ftpURI + fileInf.Name;
 FtpWebRequest reqFTP;
 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
 reqFTP.KeepAlive = false;
 reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
 reqFTP.UseBinary = true;
 reqFTP.UsePassive = false; //选择主动还是被动模式
 //Entering Passive Mode
 reqFTP.ContentLength = fileInf.Length;
 int buffLength = 2048;
 byte[] buff = new byte[buffLength];
 int contentLen;
 FileStream fs = fileInf.OpenRead();
 try
 {
 Stream strm = reqFTP.GetRequestStream();
 contentLen = fs.Read(buff, 0, buffLength);
 while (contentLen != 0)
 {
  strm.Write(buff, 0, contentLen);
  contentLen = fs.Read(buff, 0, buffLength);
 }
 strm.Close();
 fs.Close();
 }
 catch (Exception ex)
 {
 return "同步 "+filename+"时连接不上服务器!\n";
 //Insert_Standard_ErrorLog.Insert("FtpWeb", "Upload Error --> " + ex.Message);
 }
 return "";
}
/// <summary>
/// 下载
/// </summary>
/// <param name="filePath"></param>
/// <param name="fileName"></param>
public void Download(string filePath, string fileName)
{
 FtpWebRequest reqFTP;
 try
 {
 FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);
 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileName));
 reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
 reqFTP.UseBinary = true;
 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
 Stream ftpStream = response.GetResponseStream();
 long cl = response.ContentLength;
 int bufferSize = 2048;
 int readCount;
 byte[] buffer = new byte[bufferSize];
 readCount = ftpStream.Read(buffer, 0, bufferSize);
 while (readCount > 0)
 {
  outputStream.Write(buffer, 0, readCount);
  readCount = ftpStream.Read(buffer, 0, bufferSize);
 }
 ftpStream.Close();
 outputStream.Close();
 response.Close();
 }
 catch (Exception ex)
 {
 Insert_Standard_ErrorLog.Insert("FtpWeb", "Download Error --> " + ex.Message);
 }
}
/// <summary>
/// 删除文件
/// </summary>
/// <param name="fileName"></param>
public void Delete(string fileName)
{
 try
 {
 string uri = ftpURI + fileName;
 FtpWebRequest reqFTP;
 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
 reqFTP.KeepAlive = false;
 reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
 string result = String.Empty;
 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
 long size = response.ContentLength;
 Stream datastream = response.GetResponseStream();
 StreamReader sr = new StreamReader(datastream);
 result = sr.ReadToEnd();
 sr.Close();
 datastream.Close();
 response.Close();
 }
 catch (Exception ex)
 {
 Insert_Standard_ErrorLog.Insert("FtpWeb", "Delete Error --> " + ex.Message + " 文件名:" + fileName);
 }
}
/// <summary>
/// 获取当前目录下明细(包含文件和文件夹)
/// </summary>
/// <returns></returns>
public string[] GetFilesDetailList()
{
 string[] downloadFiles;
 try
 {
 StringBuilder result = new StringBuilder();
 FtpWebRequest ftp;
 ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));
 ftp.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
 ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
 WebResponse response = ftp.GetResponse();
 StreamReader reader = new StreamReader(response.GetResponseStream());
 string line = reader.ReadLine();
 line = reader.ReadLine();
 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)
 {
 downloadFiles = null;
 Insert_Standard_ErrorLog.Insert("FtpWeb", "GetFilesDetailList Error --> " + ex.Message);
 return downloadFiles;
 }
}
/// <summary>
/// 获取当前目录下文件列表(仅文件)
/// </summary>
/// <returns></returns>
public string[] GetFileList(string mask)
{
 string[] downloadFiles;
 StringBuilder result = new StringBuilder();
 FtpWebRequest reqFTP;
 try
 {
 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));
 reqFTP.UseBinary = true;
 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
 reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
 WebResponse response = reqFTP.GetResponse();
 StreamReader reader = new StreamReader(response.GetResponseStream());
 string line = reader.ReadLine();
 while (line != null)
 {
  if (mask.Trim() != string.Empty && mask.Trim() != "*.*")
  {
  string mask_ = mask.Substring(0, mask.IndexOf("*"));
  if (line.Substring(0, mask_.Length) == mask_)
  {
   result.Append(line);
   result.Append("\n");
  }
  }
  else
  {
  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)
 {
 downloadFiles = null;
 if (ex.Message.Trim() != "远程服务器返回错误: (550) 文件不可用(例如,未找到文件,无法访问文件)。")
 {
  Insert_Standard_ErrorLog.Insert("FtpWeb", "GetFileList Error --> " + ex.Message.ToString());
 }
 return downloadFiles;
 }
}
/// <summary>
/// 获取当前目录下所有的文件夹列表(仅文件夹)
/// </summary>
/// <returns></returns>
public string[] GetDirectoryList()
{
 string[] drectory = GetFilesDetailList();
 string m = string.Empty;
 foreach (string str in drectory)
 {
 if (str.Trim().Substring(0, 1).ToUpper() == "D")
 {
  m += str.Substring(54).Trim() + "\n";
 }
 }
 char[] n = new char[] { '\n' };
 return m.Split(n);
}
/// <summary>
/// 判断当前目录下指定的子目录是否存在
/// </summary>
/// <param name="RemoteDirectoryName">指定的目录名</param>
public bool DirectoryExist(string RemoteDirectoryName)
{
 string[] dirList = GetDirectoryList();
 foreach (string str in dirList)
 {
 if (str.Trim() == RemoteDirectoryName.Trim())
 {
  return true;
 }
 }
 return false;
}
/// <summary>
/// 判断当前目录下指定的文件是否存在
/// </summary>
/// <param name="RemoteFileName">远程文件名</param>
public bool FileExist(string RemoteFileName)
{
 string[] fileList = GetFileList("*.*");
 foreach (string str in fileList)
 {
 if (str.Trim() == RemoteFileName.Trim())
 {
  return true;
 }
 }
 return false;
}
/// <summary>
/// 创建文件夹
/// </summary>
/// <param name="dirName"></param>
public void MakeDir(string dirName)
{
 FtpWebRequest reqFTP;
 try
 {
 // dirName = name of the directory to create.
 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + dirName));
 reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
 reqFTP.UseBinary = true;
 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
 Stream ftpStream = response.GetResponseStream();
 ftpStream.Close();
 response.Close();
 }
 catch (Exception ex)
 {
 Insert_Standard_ErrorLog.Insert("FtpWeb", "MakeDir Error --> " + ex.Message);
 }
}
/// <summary>
/// 获取指定文件大小
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
public long GetFileSize(string filename)
{
 FtpWebRequest reqFTP;
 long fileSize = 0;
 try
 {
 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + filename));
 reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
 reqFTP.UseBinary = true;
 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
 Stream ftpStream = response.GetResponseStream();
 fileSize = response.ContentLength;
 ftpStream.Close();
 response.Close();
 }
 catch (Exception ex)
 {
 Insert_Standard_ErrorLog.Insert("FtpWeb", "GetFileSize Error --> " + ex.Message);
 }
 return fileSize;
}
/// <summary>
/// 改名
/// </summary>
/// <param name="currentFilename"></param>
/// <param name="newFilename"></param>
public void ReName(string currentFilename, string newFilename)
{
 FtpWebRequest reqFTP;
 try
 {
 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + currentFilename));
 reqFTP.Method = WebRequestMethods.Ftp.Rename;
 reqFTP.RenameTo = newFilename;
 reqFTP.UseBinary = true;
 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
 Stream ftpStream = response.GetResponseStream();
 ftpStream.Close();
 response.Close();
 }
 catch (Exception ex)
 {
 Insert_Standard_ErrorLog.Insert("FtpWeb", "ReName Error --> " + ex.Message);
 }
}
/// <summary>
/// 移动文件
/// </summary>
/// <param name="currentFilename"></param>
/// <param name="newFilename"></param>
public void MovieFile(string currentFilename, string newDirectory)
{
 ReName(currentFilename, newDirectory);
}

希望本文所述对大家的C#程序设计有所帮助。

标签:C#,ftp
0
投稿

猜你喜欢

  • IDEA配置JRebel实现热部署的方法

    2022-08-28 20:53:00
  • C#实现农历日历的方法

    2022-08-17 21:27:29
  • java代码规范review异常事故记录

    2023-08-03 07:23:24
  • SpringBoot 接口开发教程(httpclient客户端)

    2023-05-08 17:31:34
  • mybatis教程之resultmap_动力节点Java学院整理

    2022-09-05 22:38:37
  • Java实现宠物商店管理

    2023-09-14 09:14:13
  • Android自定义View实现闪耀字体效果

    2023-05-10 02:27:43
  • Android Glide图片加载(加载监听、加载动画)

    2022-08-27 08:31:24
  • java中SynchronizedList和Vector的区别详解

    2023-08-23 10:13:12
  • Spring Boot统一异常处理最佳实践(拓展篇)

    2023-10-29 16:00:04
  • SprinBoot整合Quart实现定时调度的示例代码

    2021-12-07 21:30:59
  • 利用Intellij Idea连接远程服务器实现远程上传部署功能

    2022-05-31 13:15:54
  • SpringBoot集成Tomcat服务架构配置

    2022-06-30 09:10:11
  • C#使用Socket实现局域网聊天

    2021-07-20 02:13:20
  • C#中缓存的基本用法总结

    2023-12-06 01:22:45
  • Java学习基础之安装JDK/配置JDK环境&IEDA工具安装

    2023-02-09 13:02:40
  • java简单实现斗地主发牌功能

    2023-06-18 16:22:44
  • spring-boot使用Admin监控应用的方法

    2023-06-28 19:58:39
  • 详解spring-boot actuator(监控)配置和使用

    2022-07-12 17:20:37
  • Android 中解决Viewpage调用notifyDataSetChanged()时界面无刷新的问题

    2022-11-11 22:21:50
  • asp之家 软件编程 m.aspxhome.com