C# FTP操作类分享

作者:孤者自清 时间:2022-05-11 22:03:49 

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

}
}

来源:http://www.cnblogs.com/Liyuting/p/7084718.html

标签:C#,FTP
0
投稿

猜你喜欢

  • C/C++ Crypto密码库调用的实现方法

    2021-10-25 23:59:24
  • SpringMVC中的handlerMappings对象用法

    2023-01-09 21:38:36
  • SpringBoot使用jsr303校验的实现

    2022-04-21 04:02:39
  • Java String类常用方法梳理总结

    2021-08-22 17:57:03
  • C#多线程系列之任务基础(一)

    2022-12-09 04:48:22
  • 集合嵌套之ArrayList嵌套ArrayList实例

    2021-06-23 07:32:25
  • 使用Android studio编写一个小的jni程序

    2023-11-07 11:05:03
  • Android实现简单音乐播放器(MediaPlayer)

    2023-04-24 19:28:57
  • C#事务处理(Execute Transaction)实例解析

    2022-04-12 15:32:43
  • Android实现水波纹效果

    2022-12-11 01:47:16
  • C#异步编程Task的创建方式

    2023-07-23 06:22:43
  • spring boot动态切换数据源的实现

    2022-04-20 14:17:03
  • mybatis注入Date日期值为null的解决方法

    2021-12-08 01:49:17
  • idea搭建SSM框架遇踩的坑(附完整过程)

    2023-06-23 09:53:07
  • Android 文件数据存储实例详解

    2023-07-28 17:08:03
  • Unity实现场景加载功能

    2021-09-15 12:27:45
  • Lucene实现索引和查询的实例讲解

    2022-09-06 16:35:30
  • myBatis实现三 级嵌套复杂对象的赋值问题

    2023-11-23 06:42:26
  • ReentrantLock从源码解析Java多线程同步学习

    2023-10-13 02:32:55
  • Java中匿名类的两种实现方式

    2022-06-17 23:57:05
  • asp之家 软件编程 m.aspxhome.com