C# 遞歸 FTP 下載:征服子目錄與檔案
建立強大的檔案同步工具通常涉及解決遞歸 FTP 下載的複雜性。 一個常見的挑戰是同時處理檔案和子目錄,尤其是在將目錄視為檔案時遇到令人沮喪的 550 錯誤時。本文提出了一個在 C# 中使用遞歸程式設計的解決方案。
遞歸方法
核心解決方案在於遞歸函數設計。 這允許程式碼系統地遍歷嵌套目錄結構,從每個層級下載檔案。 由於FtpWebRequest
不直接支援遞歸,所以我們必須區分檔案和目錄。 一種方法是嘗試下載;另一種方法是嘗試下載。失敗表示目錄。或者,依靠檔案副檔名也可以達到相同的效果。
遞歸函數實作
以下 C# 函數遞迴下載 FTP 目錄的內容:
<code class="language-csharp">private void DownloadFtpDirectory(string url, NetworkCredential credentials, string localPath) { FtpWebRequest listRequest = (FtpWebRequest)WebRequest.Create(url); listRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails; listRequest.Credentials = credentials; List<string> lines = new List<string>(); using (var listResponse = (FtpWebResponse)listRequest.GetResponse()) using (Stream listStream = listResponse.GetResponseStream()) using (var listReader = new StreamReader(listStream)) { while (!listReader.EndOfStream) { lines.Add(listReader.ReadLine()); } } foreach (string line in lines) { string[] tokens = line.Split(new[] { ' ' }, 9, StringSplitOptions.RemoveEmptyEntries); string name = tokens[8]; string permissions = tokens[0]; string localFilePath = Path.Combine(localPath, name); string fileUrl = url + name; if (permissions[0] == 'd') // Directory { Directory.CreateDirectory(localFilePath); DownloadFtpDirectory(fileUrl + "/", credentials, localFilePath); } else // File { DownloadFtpFile(fileUrl, localFilePath); } } } private void DownloadFtpFile(string url, string localPath) { // Code to download the file }</code>
使用範例:
要使用此功能:
<code class="language-csharp">NetworkCredential credentials = new NetworkCredential("user", "password"); string ftpUrl = "ftp://ftp.example.com/directory/to/download/"; DownloadFtpDirectory(ftpUrl, credentials, @"C:\local\target\directory\");</code>
增強功能與注意事項:
MLSD
或使用一致目錄清單的 FTP 伺服器,請考慮使用 WinSCP .NET 組件來實作更簡單的遞迴下載。 這種改進的方法為在 C# 中透過 FTP 遞歸下載檔案和子目錄提供了更強大、更有效率的解決方案。 請記得將 "user"
、"password"
和 FTP URL 替換為您的實際憑證和目標位置。 需要實作 DownloadFtpFile
函數來處理實際的文件下載過程。
以上是如何在C#中透過FTP遞歸下載檔案和子目錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!