C# FTP操作类分享

本文实例为大家分享了C# FTP操作类的具体代码,可进行FTP的上传,下载等其他功能,支持断点续传,供大家参考,具体内容如下

FTPHelper

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace ManagementProject
{
 public class FTPHelper
 {
 string ftpRemotePath;

 #region 变量属性
 /// <summary>
 /// Ftp服务器ip
 /// </summary>
 public static string FtpServerIP = "";
 /// <summary>
 /// Ftp 指定用户名
 /// </summary>
 public static string FtpUserID = "";
 /// <summary>
 /// Ftp 指定用户密码
 /// </summary>
 public static string FtpPassword = "";

 public static string ftpURI = "ftp://" + FtpServerIP + "/";

 #endregion

 #region 从FTP服务器下载文件,指定本地路径和本地文件名
 /// <summary>
 /// 从FTP服务器下载文件,指定本地路径和本地文件名
 /// </summary>
 /// <param name="remoteFileName">远程文件名</param>
 /// <param name="localFileName">保存本地的文件名(包含路径)</param>
 /// <param name="ifCredential">是否启用身份验证(false:表示允许用户匿名下载)</param>
 /// <param name="updateProgress">报告进度的处理(第一个参数:总大小,第二个参数:当前进度)</param>
 /// <returns>是否下载成功</returns>
 public static bool FtpDownload(string remoteFileName, string localFileName, bool ifCredential, Action<int, int> updateProgress = null)
 {
  FtpWebRequest reqFTP, ftpsize;
  Stream ftpStream = null;
  FtpWebResponse response = null;
  FileStream outputStream = null;
  try
  {

  outputStream = new FileStream(localFileName, FileMode.Create);
  if (FtpServerIP == null || FtpServerIP.Trim().Length == 0)
  {
   throw new Exception("ftp下载目标服务器地址未设置!");
  }
  Uri uri = new Uri("ftp://" + FtpServerIP + "/" + remoteFileName);
  ftpsize = (FtpWebRequest)FtpWebRequest.Create(uri);
  ftpsize.UseBinary = true;

  reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri);
  reqFTP.UseBinary = true;
  reqFTP.KeepAlive = false;
  if (ifCredential)//使用用户身份认证
  {
   ftpsize.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
   reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
  }
  ftpsize.Method = WebRequestMethods.Ftp.GetFileSize;
  FtpWebResponse re = (FtpWebResponse)ftpsize.GetResponse();
  long totalBytes = re.ContentLength;
  re.Close();

  reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
  response = (FtpWebResponse)reqFTP.GetResponse();
  ftpStream = response.GetResponseStream();

  //更新进度
  if (updateProgress != null)
  {
   updateProgress((int)totalBytes, 0);//更新进度条
  }
  long totalDownloadedByte = 0;
  int bufferSize = 2048;
  int readCount;
  byte[] buffer = new byte[bufferSize];
  readCount = ftpStream.Read(buffer, 0, bufferSize);
  while (readCount > 0)
  {
   totalDownloadedByte = readCount + totalDownloadedByte;
   outputStream.Write(buffer, 0, readCount);
   //更新进度
   if (updateProgress != null)
   {
   updateProgress((int)totalBytes, (int)totalDownloadedByte);//更新进度条
   }
   readCount = ftpStream.Read(buffer, 0, bufferSize);
  }
  ftpStream.Close();
  outputStream.Close();
  response.Close();
  return true;
  }
  catch (Exception ex)
  {
  return false;
  throw;
  }
  finally
  {
  if (ftpStream != null)
  {
   ftpStream.Close();
  }
  if (outputStream != null)
  {
   outputStream.Close();
  }
  if (response != null)
  {
   response.Close();
  }
  }
 }
 /// <summary>
 /// 从FTP服务器下载文件,指定本地路径和本地文件名(支持断点下载)
 /// </summary>
 /// <param name="remoteFileName">远程文件名</param>
 /// <param name="localFileName">保存本地的文件名(包含路径)</param>
 /// <param name="ifCredential">是否启用身份验证(false:表示允许用户匿名下载)</param>
 /// <param name="size">已下载文件流大小</param>
 /// <param name="updateProgress">报告进度的处理(第一个参数:总大小,第二个参数:当前进度)</param>
 /// <returns>是否下载成功</returns>
 public static bool FtpBrokenDownload(string remoteFileName, string localFileName, bool ifCredential, long size, Action<int, int> updateProgress = null)
 {
  FtpWebRequest reqFTP, ftpsize;
  Stream ftpStream = null;
  FtpWebResponse response = null;
  FileStream outputStream = null;
  try
  {

  outputStream = new FileStream(localFileName, FileMode.Append);
  if (FtpServerIP == null || FtpServerIP.Trim().Length == 0)
  {
   throw new Exception("ftp下载目标服务器地址未设置!");
  }
  Uri uri = new Uri("ftp://" + FtpServerIP + "/" + remoteFileName);
  ftpsize = (FtpWebRequest)FtpWebRequest.Create(uri);
  ftpsize.UseBinary = true;
  ftpsize.ContentOffset = size;

  reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri);
  reqFTP.UseBinary = true;
  reqFTP.KeepAlive = false;
  reqFTP.ContentOffset = size;
  if (ifCredential)//使用用户身份认证
  {
   ftpsize.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
   reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
  }
  ftpsize.Method = WebRequestMethods.Ftp.GetFileSize;
  FtpWebResponse re = (FtpWebResponse)ftpsize.GetResponse();
  long totalBytes = re.ContentLength;
  re.Close();

  reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
  response = (FtpWebResponse)reqFTP.GetResponse();
  ftpStream = response.GetResponseStream();

  //更新进度
  if (updateProgress != null)
  {
   updateProgress((int)totalBytes, 0);//更新进度条
  }
  long totalDownloadedByte = 0;
  int bufferSize = 2048;
  int readCount;
  byte[] buffer = new byte[bufferSize];
  readCount = ftpStream.Read(buffer, 0, bufferSize);
  while (readCount > 0)
  {
   totalDownloadedByte = readCount + totalDownloadedByte;
   outputStream.Write(buffer, 0, readCount);
   //更新进度
   if (updateProgress != null)
   {
   updateProgress((int)totalBytes, (int)totalDownloadedByte);//更新进度条
   }
   readCount = ftpStream.Read(buffer, 0, bufferSize);
  }
  ftpStream.Close();
  outputStream.Close();
  response.Close();
  return true;
  }
  catch (Exception ex)
  {
  return false;
  throw;
  }
  finally
  {
  if (ftpStream != null)
  {
   ftpStream.Close();
  }
  if (outputStream != null)
  {
   outputStream.Close();
  }
  if (response != null)
  {
   response.Close();
  }
  }
 }

 /// <summary>
 /// 从FTP服务器下载文件,指定本地路径和本地文件名
 /// </summary>
 /// <param name="remoteFileName">远程文件名</param>
 /// <param name="localFileName">保存本地的文件名(包含路径)</param>
 /// <param name="ifCredential">是否启用身份验证(false:表示允许用户匿名下载)</param>
 /// <param name="updateProgress">报告进度的处理(第一个参数:总大小,第二个参数:当前进度)</param>
 /// <param name="brokenOpen">是否断点下载:true 会在localFileName 找是否存在已经下载的文件,并计算文件流大小</param>
 /// <returns>是否下载成功</returns>
 public static bool FtpDownload(string remoteFileName, string localFileName, bool ifCredential, bool brokenOpen, Action<int, int> updateProgress = null)
 {
  if (brokenOpen)
  {
  try
  {
   long size = 0;
   if (File.Exists(localFileName))
   {
   using (FileStream outputStream = new FileStream(localFileName, FileMode.Open))
   {
    size = outputStream.Length;
   }
   }
   return FtpBrokenDownload(remoteFileName, localFileName, ifCredential, size, updateProgress);
  }
  catch
  {
   throw;
  }
  }
  else
  {
  return FtpDownload(remoteFileName, localFileName, ifCredential, updateProgress);
  }
 }
 #endregion

 #region 上传文件到FTP服务器
 /// <summary>
 /// 上传文件到FTP服务器
 /// </summary>
 /// <param name="localFullPath">本地带有完整路径的文件名</param>
 /// <param name="updateProgress">报告进度的处理(第一个参数:总大小,第二个参数:当前进度)</param>
 /// <returns>是否下载成功</returns>
 public static bool FtpUploadFile(string localFullPathName, Action<int, int> updateProgress = null)
 {
  FtpWebRequest reqFTP;
  Stream stream = null;
  FtpWebResponse response = null;
  FileStream fs = null;
  try
  {
  FileInfo finfo = new FileInfo(localFullPathName);
  if (FtpServerIP == null || FtpServerIP.Trim().Length == 0)
  {
   throw new Exception("ftp上传目标服务器地址未设置!");
  }
  Uri uri = new Uri("ftp://" + FtpServerIP + "/" + finfo.Name);
  reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri);
  reqFTP.KeepAlive = false;
  reqFTP.UseBinary = true;
  reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);//用户,密码
  reqFTP.Method = WebRequestMethods.Ftp.UploadFile;//向服务器发出下载请求命令
  reqFTP.ContentLength = finfo.Length;//为request指定上传文件的大小
  response = reqFTP.GetResponse() as FtpWebResponse;
  reqFTP.ContentLength = finfo.Length;
  int buffLength = 1024;
  byte[] buff = new byte[buffLength];
  int contentLen;
  fs = finfo.OpenRead();
  stream = reqFTP.GetRequestStream();
  contentLen = fs.Read(buff, 0, buffLength);
  int allbye = (int)finfo.Length;
  //更新进度
  if (updateProgress != null)
  {
   updateProgress((int)allbye, 0);//更新进度条
  }
  int startbye = 0;
  while (contentLen != 0)
  {
   startbye = contentLen + startbye;
   stream.Write(buff, 0, contentLen);
   //更新进度
   if (updateProgress != null)
   {
   updateProgress((int)allbye, (int)startbye);//更新进度条
   }
   contentLen = fs.Read(buff, 0, buffLength);
  }
  stream.Close();
  fs.Close();
  response.Close();
  return true;

  }
  catch (Exception ex)
  {
  return false;
  throw;
  }
  finally
  {
  if (fs != null)
  {
   fs.Close();
  }
  if (stream != null)
  {
   stream.Close();
  }
  if (response != null)
  {
   response.Close();
  }
  }
 }

 /// <summary>
 /// 上传文件到FTP服务器(断点续传)
 /// </summary>
 /// <param name="localFullPath">本地文件全路径名称:C:\Users\JianKunKing\Desktop\IronPython脚本测试工具</param>
 /// <param name="remoteFilepath">远程文件所在文件夹路径</param>
 /// <param name="updateProgress">报告进度的处理(第一个参数:总大小,第二个参数:当前进度)</param>
 /// <returns></returns>
 public static bool FtpUploadBroken(string localFullPath, string remoteFilepath, Action<int, int> updateProgress = null)
 {
  if (remoteFilepath == null)
  {
  remoteFilepath = "";
  }
  string newFileName = string.Empty;
  bool success = true;
  FileInfo fileInf = new FileInfo(localFullPath);
  long allbye = (long)fileInf.Length;
  if (fileInf.Name.IndexOf("#") == -1)
  {
  newFileName = RemoveSpaces(fileInf.Name);
  }
  else
  {
  newFileName = fileInf.Name.Replace("#", "#");
  newFileName = RemoveSpaces(newFileName);
  }
  long startfilesize = GetFileSize(newFileName, remoteFilepath);
  if (startfilesize >= allbye)
  {
  return false;
  }
  long startbye = startfilesize;
  //更新进度
  if (updateProgress != null)
  {
  updateProgress((int)allbye, (int)startfilesize);//更新进度条
  }

  string uri;
  if (remoteFilepath.Length == 0)
  {
  uri = "ftp://" + FtpServerIP + "/" + newFileName;
  }
  else
  {
  uri = "ftp://" + FtpServerIP + "/" + remoteFilepath + "/" + newFileName;
  }
  FtpWebRequest reqFTP;
  // 根据uri创建FtpWebRequest对象
  reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
  // ftp用户名和密码
  reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
  // 默认为true,连接不会被关闭
  // 在一个命令之后被执行
  reqFTP.KeepAlive = false;
  // 指定执行什么命令
  reqFTP.Method = WebRequestMethods.Ftp.AppendFile;
  // 指定数据传输类型
  reqFTP.UseBinary = true;
  // 上传文件时通知服务器文件的大小
  reqFTP.ContentLength = fileInf.Length;
  int buffLength = 2048;// 缓冲大小设置为2kb
  byte[] buff = new byte[buffLength];
  // 打开一个文件流 (System.IO.FileStream) 去读上传的文件
  FileStream fs = fileInf.OpenRead();
  Stream strm = null;
  try
  {
  // 把上传的文件写入流
  strm = reqFTP.GetRequestStream();
  // 每次读文件流的2kb
  fs.Seek(startfilesize, 0);
  int contentLen = fs.Read(buff, 0, buffLength);
  // 流内容没有结束
  while (contentLen != 0)
  {
   // 把内容从file stream 写入 upload stream
   strm.Write(buff, 0, contentLen);
   contentLen = fs.Read(buff, 0, buffLength);
   startbye += contentLen;
   //更新进度
   if (updateProgress != null)
   {
   updateProgress((int)allbye, (int)startbye);//更新进度条
   }
  }
  // 关闭两个流
  strm.Close();
  fs.Close();
  }
  catch
  {
  success = false;
  throw;
  }
  finally
  {
  if (fs != null)
  {
   fs.Close();
  }
  if (strm != null)
  {
   strm.Close();
  }
  }
  return success;
 }

 /// <summary>
 /// 去除空格
 /// </summary>
 /// <param name="str"></param>
 /// <returns></returns>
 private static string RemoveSpaces(string str)
 {
  string a = "";
  CharEnumerator CEnumerator = str.GetEnumerator();
  while (CEnumerator.MoveNext())
  {
  byte[] array = new byte[1];
  array = System.Text.Encoding.ASCII.GetBytes(CEnumerator.Current.ToString());
  int asciicode = (short)(array[0]);
  if (asciicode != 32)
  {
   a += CEnumerator.Current.ToString();
  }
  }
  string sdate = System.DateTime.Now.Year.ToString() + System.DateTime.Now.Month.ToString() + System.DateTime.Now.Day.ToString() + System.DateTime.Now.Hour.ToString()
  + System.DateTime.Now.Minute.ToString() + System.DateTime.Now.Second.ToString() + System.DateTime.Now.Millisecond.ToString();
  return a.Split('.')[a.Split('.').Length - 2] + "." + a.Split('.')[a.Split('.').Length - 1];
 }
 /// <summary>
 /// 获取已上传文件大小
 /// </summary>
 /// <param name="filename">文件名称</param>
 /// <param name="path">服务器文件路径</param>
 /// <returns></returns>
 public static long GetFileSize(string filename, string remoteFilepath)
 {
  long filesize = 0;
  try
  {
  FtpWebRequest reqFTP;
  FileInfo fi = new FileInfo(filename);
  string uri;
  if (remoteFilepath.Length == 0)
  {
   uri = "ftp://" + FtpServerIP + "/" + fi.Name;
  }
  else
  {
   uri = "ftp://" + FtpServerIP + "/" + remoteFilepath + "/" + fi.Name;
  }
  reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri);
  reqFTP.KeepAlive = false;
  reqFTP.UseBinary = true;
  reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);//用户,密码
  reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
  FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
  filesize = response.ContentLength;
  return filesize;
  }
  catch
  {
  return 0;
  }
 }

 //public void Connect(String path, string ftpUserID, string ftpPassword)//连接ftp
 //{
 // // 根据uri创建FtpWebRequest对象
 // reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));
 // // 指定数据传输类型
 // reqFTP.UseBinary = true;
 // // ftp用户名和密码
 // reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
 //}

 #endregion

 #region 获取当前目录下明细
 /// <summary>
 /// 获取当前目录下明细(包含文件和文件夹)
 /// </summary>
 /// <returns></returns>
 public static 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(), Encoding.Default);
  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)
  {
  downloadFiles = null;
  throw ex;
  }
 }

 /// <summary>
 /// 获取当前目录下文件列表(仅文件)
 /// </summary>
 /// <returns></returns>
 public static 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(), Encoding.Default);

  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;
  throw ex;
  }
 }

 /// <summary>
 /// 获取当前目录下所有的文件夹列表(仅文件夹)
 /// </summary>
 /// <returns></returns>
 public static string[] GetDirectoryList()
 {
  string[] drectory = GetFilesDetailList();
  string m = string.Empty;
  foreach (string str in drectory)
  {
  int dirPos = str.IndexOf("<DIR>");
  if (dirPos > 0)
  {
   /*判断 Windows 风格*/
   m += str.Substring(dirPos + 5).Trim() + "\n";
  }
  else if (str.Trim().Substring(0, 1).ToUpper() == "D")
  {
   /*判断 Unix 风格*/
   string dir = str.Substring(54).Trim();
   if (dir != "." && dir != "..")
   {
   m += dir + "\n";
   }
  }
  }

  char[] n = new char[] { '\n' };
  return m.Split(n);
 }
 #endregion

 #region 删除文件及文件夹
 /// <summary>
 /// 删除文件
 /// </summary>
 /// <param name="fileName"></param>
 public static bool 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();
  return true;
  }
  catch (Exception ex)
  {
  return false;
  throw ex;
  }
 }

 /// <summary>
 /// 删除文件夹
 /// </summary>
 /// <param name="folderName"></param>
 public static void RemoveDirectory(string folderName)
 {
  try
  {
  string uri = ftpURI + folderName;
  FtpWebRequest reqFTP;
  reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

  reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
  reqFTP.KeepAlive = false;
  reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;

  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)
  {
  throw ex;
  }
 }
 #endregion

 #region 其他操作
 /// <summary>
 /// 获取指定文件大小
 /// </summary>
 /// <param name="filename"></param>
 /// <returns></returns>
 public static 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)
  {
  throw ex;
  }
  return fileSize;
 }

 /// <summary>
 /// 判断当前目录下指定的子目录是否存在
 /// </summary>
 /// <param name="RemoteDirectoryName">指定的目录名</param>
 public bool DirectoryExist(string RemoteDirectoryName)
 {
  try
  {
  string[] dirList = GetDirectoryList();

  foreach (string str in dirList)
  {
   if (str.Trim() == RemoteDirectoryName.Trim())
   {
   return true;
   }
  }
  return false;
  }
  catch
  {
  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)
  {
  throw ex;
  }
 }

 /// <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)
  {
  throw ex;
  }
 }

 /// <summary>
 /// 移动文件
 /// </summary>
 /// <param name="currentFilename"></param>
 /// <param name="newFilename"></param>
 public void MovieFile(string currentFilename, string newDirectory)
 {
  ReName(currentFilename, newDirectory);
 }

 /// <summary>
 /// 切换当前目录
 /// </summary>
 /// <param name="DirectoryName"></param>
 /// <param name="IsRoot">true 绝对路径 false 相对路径</param>
 public void GotoDirectory(string DirectoryName, bool IsRoot)
 {

  if (IsRoot)
  {
  ftpRemotePath = DirectoryName;
  }
  else
  {
  ftpRemotePath += DirectoryName + "/";
  }
  ftpURI = "ftp://" + FtpServerIP + "/" + ftpRemotePath + "/";
 }
 #endregion

 }
}

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

(0)

相关推荐

  • C#实现自定义FTP操作封装类实例

    本文实例讲述了C#实现自定义FTP操作封装类.分享给大家供大家参考.具体如下: 这个C#类封装了FTP的常用操作,包括连接ftp服务器.列表服务器上的目录和文件,从ftp下载文件,上传文件到ftp服务器等等 using System; using System.Text; using System.IO; namespace DotNet.Utilities { public class FTPOperater { #region 属性 private FTPClient ftp; /// <s

  • C#版ftp方法实现类的代码

    /*  FTPFactory.cs  Better view with tab space=4  Written by Jaimon Mathew (jaimonmathew@rediffmail.com)  Rolander,Dan (Dan.Rolander@marriott.com) has modified the  download  method to cope with file name with path information. He also  provided  the 

  • 分享用于操作FTP的客户端C#类

    这是一个用于操作FTP的客户端C#类,类已经封装好了各种常用的Ftp操作方法,调用非常简单,你不需要关心ftp连接和操作的细节,只要调用这个类里的相关方法就可以了. using System; using System.Net; using System.IO; using System.Text; using System.Net.Sockets; using System.Threading; namespace DotNet.Utilities { public class FTPClie

  • c#操作ftp类分享

    复制代码 代码如下: class ftp{    private string host = null;    private string user = null;    private string pass = null;    private FtpWebRequest ftpRequest = null;    private FtpWebResponse ftpResponse = null;    private Stream ftpStream = null;    privat

  • C#操作ftp类完整实例

    本文实例讲述了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; st

  • C# FTP操作类分享

    本文实例为大家分享了C# FTP操作类的具体代码,可进行FTP的上传,下载等其他功能,支持断点续传,供大家参考,具体内容如下 FTPHelper using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace ManagementProjec

  • PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)

    复制代码 代码如下: <?php/*** 作用:FTP操作类( 拷贝.移动.删除文件/创建目录 )* 时间:2006/5/9* 作者:欣然随风* QQ:276624915*/class class_ftp{    public $off; // 返回操作状态(成功/失败)    public $conn_id; // FTP连接    /**     * 方法:FTP连接     * @FTP_HOST -- FTP主机     * @FTP_PORT -- 端口     * @FTP_USER

  • C#时间操作类分享

    本文实例为大家分享了C#时间操作类的具体代码,供大家参考,具体内容如下 using System; namespace DotNet.Utilities { /// <summary> /// 时间类 /// 1.SecondToMinute(int Second) 把秒转换成分钟 /// </summary> public class TimeHelper { /// <summary> /// 将时间格式化成 年月日 的形式,如果时间为null,返回当前系统时间 /

  • C#文件操作类分享

    本文实例为大家分享了C#文件操作类的具体代码,供大家参考,具体内容如下 using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Reflection; using System.Collections; using System.Data.Common; namespace DotNet.Utilities { //JSON转换类 public class

  • php实现mysql数据库操作类分享

    复制代码 代码如下: <?php/*数据库操作类*/class Mysql{ private $LocalHost = 'localhost'; private $LoaclUser = 'root'; private $LocalPass = '123456'; private $LocalBase = 'jiangxibaiyi'; private $LocalCode = 'UTF8'; private $PreFix; private $Conn; private $Start    

  • C#配置文件操作类分享

    C#配置文件操作类,供大家参考,具体内容如下 注意添加引用:System.Configuration: using System; using System.Collections.Generic; using System.Text; using System.Configuration; namespace DotNet.Utilities.配置文件操作类 { public class ConfigHelper_sufei { /// <summary> /// 根据Key取Value值

  • c#注册表操作类分享

    复制代码 代码如下: /// <summary>/// 注册表基项静态域/// /// 主要包括:/// 1.Registry.ClassesRoot 对应于HKEY_CLASSES_ROOT主键/// 2.Registry.CurrentUser 对应于HKEY_CURRENT_USER主键/// 3.Registry.LocalMachine 对应于 HKEY_LOCAL_MACHINE主键/// 4.Registry.User 对应于 HKEY_USER主键/// 5.Registry.

  • Python FTP操作类代码分享

    复制代码 代码如下: #!/usr/bin/py2# -*- coding: utf-8 -*-#encoding=utf-8 '''''    ftp自动下载.自动上传脚本,可以递归目录操作''' from ftplib import FTPimport os, sys, string, datetime, timeimport socket class FtpClient: def __init__(self, host, user, passwd, remotedir, port=21):

  • C# XML操作类分享

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 XmlHelper using System.Xml; using System.Data; namespace DotNet.Utilities { /// <summary> /// Xml的操作公共类 /// </summary> public class XmlHelper { #region 字段定义 /// <summary> /// XML文件的物理路径 /// <

  • c#连接access数据库操作类分享

    1.配置web.config文件:配置数据库连接参数(根据实际情况设置数据库路径和密码) 复制代码 代码如下: <configuration><appSettings/><connectionStrings><add name="ConnectionString" connectionString="PRovider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\keleyi\App_Data\db.m

随机推荐