热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#操作ftp类完整实例

C#操作ftp类完整实例-本文实例讲述了C#操作ftp类。分享给大家供大家参考。具体如下:usingSystem;usingSystem.Collections.Generic;u

本文实例讲述了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;
 /// 
 /// 连接FTP
 /// 
 /// FTP连接地址
 /// 指定FTP连接成功后的当前目录, 如果不指定即默认为根目录
 /// 用户名
 /// 密码
 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();
 }
  /// 
 /// 上传文件
 /// 
 /// 
 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 "";
 }
 /// 
 /// 下载
 /// 
 /// 
 /// 
 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);
  }
 }
 /// 
 /// 删除文件
 /// 
 /// 
 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);
  }
 }
 /// 
 /// 获取当前目录下明细(包含文件和文件夹)
 /// 
 /// 
 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;
  }
 }
 /// 
 /// 获取当前目录下文件列表(仅文件)
 /// 
 /// 
 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;
  }
 }
 /// 
 /// 获取当前目录下所有的文件夹列表(仅文件夹)
 /// 
 /// 
 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);
 }
 /// 
 /// 判断当前目录下指定的子目录是否存在
 /// 
 /// 指定的目录名
 public bool DirectoryExist(string RemoteDirectoryName)
 {
  string[] dirList = GetDirectoryList();
  foreach (string str in dirList)
  {
  if (str.Trim() == RemoteDirectoryName.Trim())
  {
   return true;
  }
  }
  return false;
 }
 /// 
 /// 判断当前目录下指定的文件是否存在
 /// 
 /// 远程文件名
 public bool FileExist(string RemoteFileName)
 {
  string[] fileList = GetFileList("*.*");
  foreach (string str in fileList)
  {
  if (str.Trim() == RemoteFileName.Trim())
  {
   return true;
  }
  }
  return false;
 }
 /// 
 /// 创建文件夹
 /// 
 /// 
 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);
  }
 }
 /// 
 /// 获取指定文件大小
 /// 
 /// 
 /// 
 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;
 }
 /// 
 /// 改名
 /// 
 /// 
 /// 
 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);
  }
 }
 /// 
 /// 移动文件
 /// 
 /// 
 /// 
 public void MovieFile(string currentFilename, string newDirectory)
 {
  ReName(currentFilename, newDirectory);
 }

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


推荐阅读
  • php怎么重新发布网站(2023年最新分享) ... [详细]
  • 本文档详细介绍了Robot Framework的基础知识、安装配置方法及其实用技巧。从环境搭建到编写第一个测试用例,涵盖了一系列实用的操作指南和最佳实践。 ... [详细]
  • 应用程序配置详解
    本文介绍了配置文件的关键特性及其在不同场景下的应用,重点探讨了Machine.Config和Web.Config两种主要配置文件的用途和配置方法。文章还详细解释了如何利用XML格式的配置文件来调整应用程序的行为,包括自定义配置、错误处理、身份验证和授权设置。 ... [详细]
  • 深入理解FastDFS
    FastDFS是一款高效、简洁的分布式文件系统,广泛应用于互联网应用中,用于处理大量用户上传的文件,如图片、视频等。本文探讨了FastDFS的设计理念及其如何通过独特的架构设计提高性能和可靠性。 ... [详细]
  • 本文深入探讨了Java注解的基本概念及其在现代Java开发中的应用。文章不仅介绍了如何创建和使用自定义注解,还详细讲解了如何利用反射机制解析注解,以及Java内建注解的使用场景。 ... [详细]
  • Java WebSocket 实时通信服务端实现
    本文介绍了一个基于Java的WebSocket实时通信服务端代码示例,包括客户端连接管理、消息接收与分发等功能。 ... [详细]
  • 本文档详细介绍了服务器与应用系统迁移的策略与实施步骤。迁移不仅涉及数据的转移,还包括环境配置、应用兼容性测试等多个方面,旨在确保迁移过程的顺利进行及迁移后的系统稳定运行。 ... [详细]
  • 本文详细介绍了Java中`org.sakaiproject.site.api.Site.addPage()`方法的功能和使用方法,并提供了多个实际项目中的代码示例。 ... [详细]
  • 本文探讨了在Java应用中实现线程池优雅关闭的两种方法,包括使用ShutdownHook注册钩子函数以及通过SignalHandler处理信号量。每种方法都提供了具体的代码示例,并讨论了可能遇到的问题及解决方案。 ... [详细]
  • 本文详细介绍了 C# 编程语言中 Main 方法的作用、不同形式及其使用场景,帮助开发者更好地理解和应用这一重要概念。 ... [详细]
  • Redis 教程01 —— 如何安装 Redis
    本文介绍了 Redis,这是一个由 Salvatore Sanfilippo 开发的键值存储系统。Redis 是一款开源且高性能的数据库,支持多种数据结构存储,并提供了丰富的功能和特性。 ... [详细]
  • 一个产品数组拼图|集合 2 (O(1)空间) ... [详细]
  • 本文详细探讨了 Java 中 Daemon 线程的特点及其应用场景,并深入分析了 Random 类的源代码,帮助开发者更好地理解和使用这些核心组件。 ... [详细]
  • 我正在尝试在python正则表达式中使用正向后缀来匹配此示例zpool输出中 ... [详细]
  • 解决CSS因MIME类型不匹配导致的加载失败问题
    本文详细介绍了在Web开发过程中,遇到CSS文件因MIME类型不匹配而无法正确加载的问题及其解决方案,适合前端开发者阅读。 ... [详细]
author-avatar
经典调剂行570
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有