溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C# FTP操作類分享

發(fā)布時(shí)間:2020-08-27 22:05:47 來源:腳本之家 閱讀:135 作者:孤者自清 欄目:編程語言

本文實(shí)例為大家分享了C# FTP操作類的具體代碼,可進(jìn)行FTP的上傳,下載等其他功能,支持?jǐn)帱c(diǎn)續(xù)傳,供大家參考,具體內(nèi)容如下

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服務(wù)器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服務(wù)器下載文件,指定本地路徑和本地文件名
 /// <summary>
 /// 從FTP服務(wù)器下載文件,指定本地路徑和本地文件名
 /// </summary>
 /// <param name="remoteFileName">遠(yuǎn)程文件名</param>
 /// <param name="localFileName">保存本地的文件名(包含路徑)</param>
 /// <param name="ifCredential">是否啟用身份驗(yàn)證(false:表示允許用戶匿名下載)</param>
 /// <param name="updateProgress">報(bào)告進(jìn)度的處理(第一個(gè)參數(shù):總大小,第二個(gè)參數(shù):當(dāng)前進(jìn)度)</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下載目標(biāo)服務(wù)器地址未設(shè)置!");
  }
  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)//使用用戶身份認(rèn)證
  {
   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();

  //更新進(jìn)度 
  if (updateProgress != null)
  {
   updateProgress((int)totalBytes, 0);//更新進(jìn)度條 
  }
  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);
   //更新進(jìn)度 
   if (updateProgress != null)
   {
   updateProgress((int)totalBytes, (int)totalDownloadedByte);//更新進(jìn)度條 
   }
   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服務(wù)器下載文件,指定本地路徑和本地文件名(支持?jǐn)帱c(diǎn)下載)
 /// </summary>
 /// <param name="remoteFileName">遠(yuǎn)程文件名</param>
 /// <param name="localFileName">保存本地的文件名(包含路徑)</param>
 /// <param name="ifCredential">是否啟用身份驗(yàn)證(false:表示允許用戶匿名下載)</param>
 /// <param name="size">已下載文件流大小</param>
 /// <param name="updateProgress">報(bào)告進(jìn)度的處理(第一個(gè)參數(shù):總大小,第二個(gè)參數(shù):當(dāng)前進(jìn)度)</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下載目標(biāo)服務(wù)器地址未設(shè)置!");
  }
  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)//使用用戶身份認(rèn)證
  {
   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();

  //更新進(jìn)度 
  if (updateProgress != null)
  {
   updateProgress((int)totalBytes, 0);//更新進(jìn)度條 
  }
  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);
   //更新進(jìn)度 
   if (updateProgress != null)
   {
   updateProgress((int)totalBytes, (int)totalDownloadedByte);//更新進(jìn)度條 
   }
   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服務(wù)器下載文件,指定本地路徑和本地文件名
 /// </summary>
 /// <param name="remoteFileName">遠(yuǎn)程文件名</param>
 /// <param name="localFileName">保存本地的文件名(包含路徑)</param>
 /// <param name="ifCredential">是否啟用身份驗(yàn)證(false:表示允許用戶匿名下載)</param>
 /// <param name="updateProgress">報(bào)告進(jìn)度的處理(第一個(gè)參數(shù):總大小,第二個(gè)參數(shù):當(dāng)前進(jìn)度)</param>
 /// <param name="brokenOpen">是否斷點(diǎn)下載:true 會(huì)在localFileName 找是否存在已經(jīng)下載的文件,并計(jì)算文件流大小</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服務(wù)器
 /// <summary>
 /// 上傳文件到FTP服務(wù)器
 /// </summary>
 /// <param name="localFullPath">本地帶有完整路徑的文件名</param>
 /// <param name="updateProgress">報(bào)告進(jìn)度的處理(第一個(gè)參數(shù):總大小,第二個(gè)參數(shù):當(dāng)前進(jìn)度)</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上傳目標(biāo)服務(wù)器地址未設(shè)置!");
  }
  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;//向服務(wù)器發(fā)出下載請(qǐng)求命令
  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;
  //更新進(jìn)度 
  if (updateProgress != null)
  {
   updateProgress((int)allbye, 0);//更新進(jìn)度條 
  }
  int startbye = 0;
  while (contentLen != 0)
  {
   startbye = contentLen + startbye;
   stream.Write(buff, 0, contentLen);
   //更新進(jìn)度 
   if (updateProgress != null)
   {
   updateProgress((int)allbye, (int)startbye);//更新進(jìn)度條 
   }
   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服務(wù)器(斷點(diǎn)續(xù)傳)
 /// </summary>
 /// <param name="localFullPath">本地文件全路徑名稱:C:\Users\JianKunKing\Desktop\IronPython腳本測(cè)試工具</param>
 /// <param name="remoteFilepath">遠(yuǎn)程文件所在文件夾路徑</param>
 /// <param name="updateProgress">報(bào)告進(jìn)度的處理(第一個(gè)參數(shù):總大小,第二個(gè)參數(shù):當(dāng)前進(jìn)度)</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;
  //更新進(jìn)度 
  if (updateProgress != null)
  {
  updateProgress((int)allbye, (int)startfilesize);//更新進(jìn)度條 
  }

  string uri;
  if (remoteFilepath.Length == 0)
  {
  uri = "ftp://" + FtpServerIP + "/" + newFileName;
  }
  else
  {
  uri = "ftp://" + FtpServerIP + "/" + remoteFilepath + "/" + newFileName;
  }
  FtpWebRequest reqFTP;
  // 根據(jù)uri創(chuàng)建FtpWebRequest對(duì)象 
  reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
  // ftp用戶名和密碼 
  reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
  // 默認(rèn)為true,連接不會(huì)被關(guān)閉 
  // 在一個(gè)命令之后被執(zhí)行 
  reqFTP.KeepAlive = false;
  // 指定執(zhí)行什么命令 
  reqFTP.Method = WebRequestMethods.Ftp.AppendFile;
  // 指定數(shù)據(jù)傳輸類型 
  reqFTP.UseBinary = true;
  // 上傳文件時(shí)通知服務(wù)器文件的大小 
  reqFTP.ContentLength = fileInf.Length;
  int buffLength = 2048;// 緩沖大小設(shè)置為2kb 
  byte[] buff = new byte[buffLength];
  // 打開一個(gè)文件流 (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);
  // 流內(nèi)容沒有結(jié)束 
  while (contentLen != 0)
  {
   // 把內(nèi)容從file stream 寫入 upload stream 
   strm.Write(buff, 0, contentLen);
   contentLen = fs.Read(buff, 0, buffLength);
   startbye += contentLen;
   //更新進(jìn)度 
   if (updateProgress != null)
   {
   updateProgress((int)allbye, (int)startbye);//更新進(jìn)度條 
   }
  }
  // 關(guān)閉兩個(gè)流 
  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">服務(wù)器文件路徑</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
 //{
 // // 根據(jù)uri創(chuàng)建FtpWebRequest對(duì)象
 // reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));
 // // 指定數(shù)據(jù)傳輸類型
 // reqFTP.UseBinary = true;
 // // ftp用戶名和密碼
 // reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
 //}

 #endregion

 #region 獲取當(dāng)前目錄下明細(xì)
 /// <summary>
 /// 獲取當(dāng)前目錄下明細(xì)(包含文件和文件夾)
 /// </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>
 /// 獲取當(dāng)前目錄下文件列表(僅文件)
 /// </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>
 /// 獲取當(dāng)前目錄下所有的文件夾列表(僅文件夾)
 /// </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 風(fēng)格*/
   m += str.Substring(dirPos + 5).Trim() + "\n";
  }
  else if (str.Trim().Substring(0, 1).ToUpper() == "D")
  {
   /*判斷 Unix 風(fēng)格*/
   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>
 /// 判斷當(dāng)前目錄下指定的子目錄是否存在
 /// </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>
 /// 判斷當(dāng)前目錄下指定的文件是否存在
 /// </summary>
 /// <param name="RemoteFileName">遠(yuǎn)程文件名</param>
 public bool FileExist(string RemoteFileName)
 {
  string[] fileList = GetFileList("*.*");
  foreach (string str in fileList)
  {
  if (str.Trim() == RemoteFileName.Trim())
  {
   return true;
  }
  }
  return false;
 }

 /// <summary>
 /// 創(chuàng)建文件夾
 /// </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>
 /// 移動(dòng)文件
 /// </summary>
 /// <param name="currentFilename"></param>
 /// <param name="newFilename"></param>
 public void MovieFile(string currentFilename, string newDirectory)
 {
  ReName(currentFilename, newDirectory);
 }

 /// <summary>
 /// 切換當(dāng)前目錄
 /// </summary>
 /// <param name="DirectoryName"></param>
 /// <param name="IsRoot">true 絕對(duì)路徑 false 相對(duì)路徑</param>
 public void GotoDirectory(string DirectoryName, bool IsRoot)
 {

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


 }
}

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI