C# FTP操作类分享

发布时间:2020-08-27 22:05:47 作者:孤者自清
来源:脚本之家 阅读:131

本文实例为大家分享了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


 }
}

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

推荐阅读:
  1. C#实现中国农历日历操作类的代码分享
  2. C# FTP操作类

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ftp

上一篇:javascript中this用法实例详解

下一篇:python程序快速缩进多行代码方法总结

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》