久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

C# FTP操作類分享

這篇文章主要為大家分享了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);
 /
                
【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

這篇文章主要為大家詳細介紹了C# SendMail發送郵件功能實現,具有一定的參考價值,感興趣的小伙伴們可以參考一下
這篇文章主要介紹了C#實現的SQL備份與還原功能,結合具體實例形式分析了C#操作數據庫實現SQL備份與還原相關的控件、SQL連接、文件等操作技巧,需要的朋友可以參考下
這篇文章主要介紹了C#使用checkedListBox1控件鏈接數據庫的方法,結合具體實例形式分析了數據庫的創建及checkedListBox1控件連接數據庫的相關操作技巧,需要的朋友可以參考下
這篇文章主要介紹了C#實現的sqlserver操作類,結合具體實例形式分析了C#針對sqlserver數據庫進行連接、查詢、更新、關閉等相關操作技巧,需要的朋友可以參考下
這篇文章主要為大家詳細介紹了C#多線程數組模擬socket的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
這篇文章主要為大家詳細介紹了C#根據http和ftp圖片地址獲取對應圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
主站蜘蛛池模板: 欧美精品综合在线 | 成人在线视频免费看 | 免费在线性爱视频 | 久久久久国产一区二区三区四区 | 日韩网站在线观看 | 日韩黄 | www.888www看片 | 欧美大片久久久 | 日韩二三区 | 日韩中文字幕在线视频 | 国产精品国产精品国产专区不卡 | 精品一区二区三区电影 | av黄在线观看 | 夜夜骑天天干 | 亚洲精品久久久久久国产精华液 | 午夜电影网| 密室大逃脱第六季大神版在线观看 | 色综合网站| 丁香五月网久久综合 | 国产一二三区免费视频 | 精品欧美一区二区久久久伦 | 中文字幕精品一区 | 国产精品五区 | 久久精品视频网站 | 国产精品免费视频一区 | 亚洲精品片 | 亚洲精品视频二区 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 欧美日韩福利 | 欧美黑人一区二区三区 | 涩涩视频网站在线观看 | 伊人久久精品一区二区三区 | 日韩电影一区 | 午夜免费在线 | 欧美精品一区二区三区在线播放 | 农村黄性色生活片 | 成人免费视频网址 | 免费国产一区二区视频 | 国产一区二区精品在线 | 天天草天天操 | 免费黄网站在线观看 |