狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

c# 代碼操作ftp服務器文件

freeflydom
2024年2月24日 15:46 本文熱度 807

給大家分享一個我最近使用c#代碼操作ftp服務器的代碼示例:

基礎類的構造函數和屬性

 public abstract class FtpOperation

    {

        /// <summary>

         /// FTP服務器地址

        /// </summary>

         private string ftpServer;

 

         /// <summary>

         /// 用戶名

         /// </summary>

         private string userName;

 

         /// <summary>

         /// 密碼

         /// </summary>

         private string passWord;

 

         /// <summary>

         /// FTPHelper類的構造函數

         /// </summary>

         /// <param name="ftpServer">FTP服務器地址</param>

         /// <param name="userName">用戶名</param>

         /// <param name="passWord">密碼</param>

         public FtpOperation(string ftpServer, string userName, string passWord)

         {

             this.ftpServer = ftpServer;

             this.userName = userName;

             this.passWord = passWord;

         }

 

         /// <summary>

         /// 執行FTP操作的方法

         /// </summary>

         /// <param name="action">要執行的操作</param>

         private void ExecuteFtpOperation(Action action)

         {

             try

             {

                 action.Invoke();

             }

             catch (WebException ex)

             {

                if (ex.Status == WebExceptionStatus.Timeout)

                 {

                     Console.WriteLine("連接超時。");

                 }

                 else

                 {

                     Console.WriteLine("發生錯誤 WebException: {0}", ex.Message);

                 }

             }

             catch (Exception ex)

             {

                 Console.WriteLine("發生錯誤: {0}", ex.Message);

             }

         }

  }

}

 /// <summary>

 /// 執行FTP操作的方法

 /// </summary>

 /// <param name="action">要執行的操作</param>

 private void ExecuteFtpOperation(Action action)

 {

     try

     {

         action.Invoke();

     }

     catch (WebException ex)

     {

         if (ex.Status == WebExceptionStatus.Timeout)

         {

             Console.WriteLine("連接超時。");

         }

         else

         {

             Console.WriteLine("發生錯誤 WebException: {0}", ex.Message);

         }

     }

     catch (Exception ex)

     {

         Console.WriteLine("發生錯誤: {0}", ex.Message);

     }

 }


 #region 文件查詢


 /// <summary>

 /// 遞歸查詢FTP服務器上所有文件和目錄

 /// </summary>

 /// <param name="ftpDirectoryPath">要查詢的目錄路徑</param>

 public virtual List<FileInfo> RecursiveQueryAll(string ftpDirectoryPath = "")

 {

     List<FileInfo> list = new List<FileInfo>();

     ExecuteFtpOperation(() =>

     {

         List<FileInfo> currentList = QueryAll(ftpDirectoryPath);

         list.AddRange(currentList);


         foreach (var fileInfo in currentList)

         {

             if (fileInfo.FileType == "Folder")

             {

                 // 如果是文件夾,遞歸查詢

                 List<FileInfo> subList = RecursiveQueryAll(ftpDirectoryPath + "/" + fileInfo.FileName);

                 list.AddRange(subList);

             }

         }

     });

     return list;

 }


 /// <summary>

 /// 查詢FTP服務器上所有文件和目錄

 /// </summary>

 /// <param name="ftpDirectoryPath">要查詢的目錄路徑</param>

 public virtual List<FileInfo> QueryAll(string ftpDirectoryPath = "")

 {

     List<FileInfo> list = new List<FileInfo>();

     ExecuteFtpOperation(() =>

     {

         FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpServer + ftpDirectoryPath);

         request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;

         request.Credentials = new NetworkCredential(userName, passWord);

         request.Timeout = 5000;


         using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())

         {

             //Console.WriteLine("狀態: {0}", response.StatusDescription);


             using (var responseStream = response.GetResponseStream())

             {

                 if (responseStream != null)

                 {

                     using (var reader = new StreamReader(responseStream))

                     {

                         string line = reader.ReadLine();

                         while (!string.IsNullOrEmpty(line))

                         {

                             list.AddRange(ParseFTPFileList(line));

                             line = reader.ReadLine();

                         }

                     }

                 }

             }

         }

     });

     return list;

 }


 /// <summary>

 /// 解析FTP服務器返回的文件列表信息,將其轉換為FileInfo對象列表

 /// </summary>

 /// <param name="ftpFileList">FTP服務器返回的文件列表信息</param>

 /// <returns>包含文件信息的FileInfo對象列表</returns>

 public virtual List<FileInfo> ParseFTPFileList(string ftpFileList)

 {

     // 解析FTP返回的文件列表信息并返回FileInfo對象列表

     List<FileInfo> filesInfo = new List<FileInfo>();


     // 按行分割FTP文件列表信息

     string[] lines = ftpFileList.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries);


     foreach (string line in lines)

     {

         // 按空格分割行信息

         string[] parts = line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);


         if (parts.Length >= 4)

         {


             string lastModifiedDateStr = parts[0] + " " + parts[1];

             string format = "MM-dd-yy hh:mmtt"; // 指定日期時間的確切格式

             DateTime lastModifiedDate;

             DateTime.TryParseExact(lastModifiedDateStr, format, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out lastModifiedDate);


             // 提取文件大小信息

             string fileSizeStr = parts[2];

             long fileSize;

             string fileType = "Folder";

             string fileName = string.Join(" ", parts, 3, parts.Length - 3);

             if (fileSizeStr.Contains("DIR"))

             {


                 fileSize = 0;

             }

             else

             {

                 fileType = Path.GetExtension(fileName);

                 fileSize = Convert.ToInt64(fileSizeStr);

             }



             FileInfo fileInfo = new FileInfo(lastModifiedDate, fileSize, fileType, fileName);


             filesInfo.Add(fileInfo);

         }

     }


     return filesInfo;

 }

 #endregion


 #region 判斷FTP服務器上是否存在指定文件夾 && 在FTP服務器上創建文件夾 &&刪除FTP服務器上的空文件夾

 /// <summary>

 /// 判斷FTP服務器上是否存在指定文件夾

 /// </summary>

 /// <param name="directoryPath">要檢查的文件夾路徑</param>

 /// <returns>文件夾是否存在的布爾值</returns>

 public virtual bool FtpDirectoryExists(string directoryPath)

 {

     FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpServer + directoryPath);

     request.Credentials = new NetworkCredential(userName, passWord);

     request.Method = WebRequestMethods.Ftp.ListDirectory;


     try

     {

         FtpWebResponse response = (FtpWebResponse)request.GetResponse();

         response.Close();

         return true;

     }

     catch (WebException ex)

     {

         FtpWebResponse response = (FtpWebResponse)ex.Response;

         if (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)

         {

             return false;

         }

         throw;

     }

 }


 /// <summary>

 /// 在FTP服務器上創建文件夾

 /// </summary>

 /// <param name="folderName">要創建的文件夾名稱</param>

 public virtual void FtpCreateDirectory(string folderName)

 {

     ExecuteFtpOperation(() =>

     {

         string[] pathArray = folderName.Split('/');

         var tempPath = "";

         foreach (var path in pathArray)

         {

             if (path == "")

             {

                 continue;

             }

             tempPath += path + "/";

             if (FtpDirectoryExists(tempPath))

             {

                 continue;

             }

             FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpServer + tempPath);

             request.Method = WebRequestMethods.Ftp.MakeDirectory;

             request.Credentials = new NetworkCredential(userName, passWord);


             using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())

             {

                 Console.WriteLine($"文件夾{path}創建成功。");

             }

         }


     });

 }

 /// <summary>

 /// 刪除FTP服務器上的空文件夾

 /// </summary>

 /// <param name="ftpFolderPath">FTP服務器上的空文件夾路徑</param>

 public virtual void FtpDeleteFolder(string ftpFolderPath)

 {

     ExecuteFtpOperation(() =>

     {

         if (string.IsNullOrEmpty(ftpFolderPath))

         {                    

             return;

         }

         // 連接到 FTP 服務器

         FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpServer + ftpFolderPath);

         request.Credentials = new NetworkCredential(userName, passWord);

         request.Method = WebRequestMethods.Ftp.RemoveDirectory;

         using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())

         {

             Console.WriteLine($"文件夾{new DirectoryInfo(ftpFolderPath).Name}刪除成功!");

         }

     });

 }

 #endregion


 #region 文件、文件夾刪除

 /// <summary>

 /// 刪除FTP服務器指定路徑下的多個文件

 /// </summary>

 /// <param name="directoryPath">要刪除文件的目錄路徑</param>

 /// <param name="fileNames">要刪除的文件名數組</param>

 public virtual void FtpDeleteFiles(string directoryPath, string[] fileNames)

 {

     ExecuteFtpOperation(() =>

     {

         foreach (var fileName in fileNames)

         {

             FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpServer + directoryPath + "/" + fileName);

             request.Method = WebRequestMethods.Ftp.DeleteFile;

             request.Credentials = new NetworkCredential(userName, passWord);


             using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())

             {

                 Console.WriteLine($"文件 '{fileName}' 刪除成功。");

             }

         }

     });

 }


 /// <summary>

 /// 遞歸刪除FTP服務器上的文件夾及其內容

 /// </summary>

 /// <param name="directoryPath">要刪除的文件夾路徑</param>

 public virtual void FtpDeleteFolders(string directoryPath)

 {

     ExecuteFtpOperation(() =>

     {


         if (!FtpDirectoryExists(directoryPath))

         {

             Console.WriteLine($"{directoryPath} 不存在!");

             return;

         }


         // 獲取文件夾內所有文件和子文件夾

         var fileList = QueryAll(directoryPath);

         foreach (var fileInfo in fileList)

         {

             // 刪除文件

             FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpServer + directoryPath + "/" + fileInfo.FileName);

             request.Method = WebRequestMethods.Ftp.DeleteFile;

             request.Credentials = new NetworkCredential(userName, passWord);


             // 如果是文件夾,遞歸刪除

             if (fileInfo.FileType == "Folder")

             {

                 FtpDeleteFolders(directoryPath + "/" + fileInfo.FileName);

             }

             else

             {

                 using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())

                 {

                     Console.WriteLine($"文件 '{fileInfo.FileName}' 刪除成功。");

                 }

             }




         }


         // 刪除空文件夾

         FtpDeleteFolder(directoryPath);

     });

 }



 #endregion


 #region  文件移動


 /// <summary>

 /// 移動FTP服務器上的多個文件

 /// </summary>

 /// <param name="sourceDirectoryPath">源文件目錄路徑</param>

 /// <param name="destinationDirectoryPath">目標文件目錄路徑</param>

 /// <param name="fileNames">要移動的文件名數組</param>

 public virtual void FtpMoveFiles(string sourceDirectoryPath, string destinationDirectoryPath, string[] fileNames)

 {

     ExecuteFtpOperation(() =>

     {

         if (!FtpDirectoryExists(sourceDirectoryPath))

         {

             Console.WriteLine($"{sourceDirectoryPath} 目錄不存在!");

             return;

         }

         if (!FtpDirectoryExists(destinationDirectoryPath))

         {

             FtpCreateDirectory(destinationDirectoryPath);

         }

         foreach (var fileName in fileNames)

         {

             FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpServer + sourceDirectoryPath + "/" + fileName);

             request.Method = WebRequestMethods.Ftp.Rename;

             request.Credentials = new NetworkCredential(userName, passWord);

             request.RenameTo = destinationDirectoryPath + "/" + fileName;


             using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())

             {

                 Console.WriteLine($"文件 '{fileName}' 移動成功。");

             }

         }

     });

 }


 /// <summary>

 /// 移動整個文件夾到目標位置

 /// </summary>

 /// <param name="sourceDirectoryPath">源文件夾路徑</param>

 /// <param name="destinationDirectoryPath">目標文件夾路徑</param>

 public virtual void FtpMoveFolder(string sourceDirectoryPath, string destinationDirectoryPath)

 {

     ExecuteFtpOperation(() =>

     {

         if (!FtpDirectoryExists(sourceDirectoryPath))

         {

             Console.WriteLine($"{sourceDirectoryPath} 目錄不存在!");

             return;

         }

         //destinationDirectoryPath = destinationDirectoryPath + "/" + new DirectoryInfo(sourceDirectoryPath).Name;//解決移動后源文件夾丟失的問題

         // 創建目標文件夾

         if (!FtpDirectoryExists(destinationDirectoryPath))

         {

             FtpCreateDirectory(destinationDirectoryPath);

         }



         // 獲取源文件夾內所有文件和子文件夾

         var fileList = QueryAll(sourceDirectoryPath);

         foreach (var fileInfo in fileList)

         {

             // 構建源文件和目標文件的完整路徑

             string sourcePath = sourceDirectoryPath + "/" + fileInfo.FileName;

             string destinationPath = destinationDirectoryPath + "/" + fileInfo.FileName;


             // 如果是文件夾,遞歸移動

             if (fileInfo.FileType == "Folder")

             {

                 FtpMoveFolder(sourcePath, destinationPath);

             }

             else

             {

                 // 創建源文件的FTP請求

                 FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpServer + sourcePath);

                 request.Method = WebRequestMethods.Ftp.Rename; // 使用重命名操作實現移動

                 request.Credentials = new NetworkCredential(userName, passWord);

                 request.RenameTo = destinationPath; // 設置重命名目標路徑


                 // 發起請求并獲取響應

                 using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())

                 {

                     Console.WriteLine($"文件 '{fileInfo.FileName}' 移動成功。");

                 }

             }

         }

         if (!string.IsNullOrEmpty(sourceDirectoryPath))

         {

             // 刪除源文件夾

             FtpDeleteFolder(sourceDirectoryPath);

         }

         

     });

 }


 #endregion


 #region 文件上傳【文件批量上傳&&文件夾上傳】

 /// <summary>

 /// 上傳文件到FTP服務器

 /// </summary>

 /// <param name="filePath">要上傳的文件路徑</param>

 /// <param name="directoryPath">目標文件夾路徑</param>

 public virtual void FtpUploadFile(string filePath, string directoryPath = "")

 {

     ExecuteFtpOperation(() =>

     {

         if (!FtpDirectoryExists(directoryPath))

         {

             FtpCreateDirectory(directoryPath);

         }

         using (WebClient client = new WebClient())

         {

             client.Credentials = new NetworkCredential(userName, passWord); ;

             client.UploadFile(ftpServer + directoryPath + "/" + Path.GetFileName(filePath), WebRequestMethods.Ftp.UploadFile, filePath);

             Console.WriteLine($"{filePath}文件上傳成功。");

         }

     });

 }

 /// <summary>

 /// 遞歸上傳文件夾到FTP服務器

 /// </summary>

 /// <param name="localFolderPath">本地文件夾路徑</param>

 /// <param name="ftpDirectoryPath">FTP服務器目標文件夾路徑</param>

 public virtual void FtpUploadFolder(string localFolderPath, string ftpDirectoryPath)

 {

     // 檢查本地文件夾是否存在

     if (!Directory.Exists(localFolderPath))

     {

         Console.WriteLine("本地文件夾不存在。");

         return;

     }


     // 獲取文件夾名稱

     string folderName = new DirectoryInfo(localFolderPath).Name;


     // 構建FTP服務器上的目標路徑

     string rootPath = (string.IsNullOrEmpty(ftpDirectoryPath) ? "" : ftpDirectoryPath + "/");


     // 如果目標文件夾在FTP服務器上不存在,則創建

     if (!FtpDirectoryExists(rootPath + folderName))

     {

         FtpCreateDirectory(rootPath + folderName);

     }


     // 獲取文件夾中的所有文件

     string[] files = Directory.GetFiles(localFolderPath);


     // 逐個上傳文件

     foreach (string file in files)

     {

         FtpUploadFile(file, rootPath + folderName);

     }


     // 獲取文件夾中的所有子文件夾

     string[] subDirectories = Directory.GetDirectories(localFolderPath);


     // 逐個處理子文件夾

     foreach (string subDirectory in subDirectories)

     {

         // 遞歸上傳子文件夾

         FtpUploadFolder(subDirectory, rootPath + folderName);

     }


     Console.WriteLine($"{localFolderPath} 文件夾上傳成功。");

 }


 /// <summary>

 /// 上傳多個文件夾到FTP服務器

 /// </summary>

 /// <param name="filePath">要上傳的文件夾路徑</param>

 /// <param name="ftpDirectoryPath">目標文件夾路徑</param>

 public virtual void FtpUploadFolders(string[] localDirectories, string ftpDirectoryPath = "")

 {

     foreach (string localDirectory in localDirectories)

     {

         FtpUploadFolder(localDirectory, ftpDirectoryPath);

     }

 }

 #endregion


 #region 文件下載

 /// <summary>

 /// 從FTP服務器下載文件到本地

 /// </summary>

 /// <param name="remoteFilePaths">要下載的遠程文件路徑數組</param>

 /// <param name="localDirectory">本地目錄路徑</param>

 public virtual void FtpDownloadFile(string[] remoteFilePaths, string localDirectory)

 {

     ExecuteFtpOperation(() =>

     {

         // 檢查本地路徑是否存在,如果不存在則創建

         if (!Directory.Exists(localDirectory))

         {

             Directory.CreateDirectory(localDirectory);

         }

         using (WebClient client = new WebClient())

         {

             client.Credentials = new NetworkCredential(userName, passWord);


             foreach (var remoteFilePath in remoteFilePaths)

             {

                 string fileName = remoteFilePath.Substring(remoteFilePath.LastIndexOf("/") + 1);

                 string localFilePath = Path.Combine(localDirectory, fileName);


                 try

                 {

                     client.DownloadFile(ftpServer + remoteFilePath, localFilePath);

                     Console.WriteLine($"文件 '{fileName}' 下載成功。");

                 }

                 catch (WebException ex)

                 {

                     Console.WriteLine($"下載文件 '{fileName}' 時出錯: {ex.Message}");

                     // Handle the exception as needed

                 }

             }

         }

     });

 }


 /// <summary>

 /// 遞歸從FTP服務器下載文件夾到本地

 /// </summary>

 /// <param name="remoteDirectoryPath">要下載的遠程文件夾路徑</param>

 /// <param name="localDirectory">本地目錄路徑</param>

 public virtual void FtpDownloadFolder(string remoteDirectoryPath, string localDirectory)

 {

     ExecuteFtpOperation(() =>

     {

         // 檢查本地路徑是否存在,如果不存在則創建

         if (!Directory.Exists(localDirectory))

         {

             Directory.CreateDirectory(localDirectory);

         }

         // 獲取遠程文件夾內所有文件和子文件夾

         var fileList = QueryAll(remoteDirectoryPath);


         foreach (var fileInfo in fileList)

         {

             string remotePath = remoteDirectoryPath + "/" + fileInfo.FileName;

             string localPath = Path.Combine(localDirectory, fileInfo.FileName);


             if (fileInfo.FileType == "Folder")

             {

                 // 如果是文件夾,遞歸下載

                 string newLocalDirectory = Path.Combine(localDirectory, fileInfo.FileName);

                 Directory.CreateDirectory(newLocalDirectory);

                 FtpDownloadFolder(remotePath, newLocalDirectory);

             }

             else

             {

                 // 如果是文件,下載到本地

                 using (WebClient client = new WebClient())

                 {

                     client.Credentials = new NetworkCredential(userName, passWord);

                     client.DownloadFile(ftpServer + remotePath, localPath);

                     Console.WriteLine($"文件 '{fileInfo.FileName}' 下載成功。");

                 }

             }

         }

     });

 }


 #endregion


FtpOperation 中其他的方法


調用

// FTP 服務器地址

string ftpServer = "ftp://127.0.0.1:27/";

// FTP 服務器用戶名

string userName = "Administrator";

// FTP 服務器密碼

string password = "admin";


FtpTest ftp = new FtpTest(ftpServer, userName, password);

//ftp.QueryAll("/Template"); //查詢

ftp.FtpDeleteFolders("");//刪除所有

ftp.FtpUploadFolder("e:\\CoaTemplate", "");//將文件夾的內容上傳到根目錄

ftp.FtpUploadFolder(@"D:\GitCode\Blog.Core", "/gitCode/Blog.Core");//將本地文件夾的內容上傳到指定目錄

var data = ftp.RecursiveQueryAll("");//查詢所有文件信息

ftp.FtpMoveFolder("/Template", "/1/Template");//文件夾移動

ftp.FtpDownloadFolder("/1", "d:\\1\\");    //將ftp服務器的指定文件夾下載到本地目錄


項目地址:https://github.com/yycb1994/FtpSiteManager

原文作者:我只吃飯不洗碗,轉自https://www.cnblogs.com/INetIMVC/p/18025336


該文章在 2024/2/24 15:55:24 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved