首頁 > 後端開發 > C++ > 如何在C#中透過FTP遞歸下載檔案和子目錄?

如何在C#中透過FTP遞歸下載檔案和子目錄?

DDD
發布: 2025-01-12 15:14:41
原創
664 人瀏覽過

How to Recursively Download Files and Subdirectories via FTP in C#?

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 組件來實作更簡單的遞迴下載。
  • 實作錯誤處理(例如,550 錯誤)以向使用者提供資訊回饋。

這種改進的方法為在 C# 中透過 FTP 遞歸下載檔案和子目錄提供了更強大、更有效率的解決方案。 請記得將 "user""password" 和 FTP URL 替換為您的實際憑證和目標位置。 需要實作 DownloadFtpFile 函數來處理實際的文件下載過程。

以上是如何在C#中透過FTP遞歸下載檔案和子目錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板