使用C#遞迴下載FTP伺服器上的檔案與子目錄
問題:
目前程式碼僅列出並下載指定FTP目錄中的文件,但無法下載子目錄和子文件。此外,嘗試將資料夾下載為檔案時,伺服器傳回550錯誤。
解:
實作遞歸目錄列出與下載操作:
遞迴目錄列出:
從子目錄中辨識檔案:
由於FtpWebRequest沒有明確的方法來實現這一點,因此可以選擇:
範例遞歸下載程式碼:
<code class="language-csharp">void DownloadFtpDirectory(string url, NetworkCredential credentials, string localPath) { // 列出目录详细信息 FtpWebRequest listRequest = (FtpWebRequest)WebRequest.Create(url); listRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails; listRequest.Credentials = credentials; var lines = new List<string>(); using (var listResponse = (FtpWebResponse)listRequest.GetResponse()) using (var listStream = listResponse.GetResponseStream()) using (var listReader = new StreamReader(listStream)) { while (!listReader.EndOfStream) { lines.Add(listReader.ReadLine()); } } // 迭代目录条目 foreach (var line in lines) { var tokens = line.Split(' ', 9, StringSplitOptions.RemoveEmptyEntries); var name = tokens[8]; var permissions = tokens[0]; var localFilePath = Path.Combine(localPath, name); var fileUrl = url + name + "/"; // 如果是目录,则递归 if (permissions[0] == 'd') { if (!Directory.Exists(localFilePath)) { Directory.CreateDirectory(localFilePath); } DownloadFtpDirectory(fileUrl, credentials, localFilePath); } // 如果是文件,则下载 else { var downloadRequest = (FtpWebRequest)WebRequest.Create(fileUrl); downloadRequest.Method = WebRequestMethods.Ftp.DownloadFile; downloadRequest.Credentials = credentials; using (FtpWebResponse downloadResponse = (FtpWebResponse)downloadRequest.GetResponse()) using (var sourceStream = downloadResponse.GetResponseStream()) using (var targetStream = File.Create(localFilePath)) { // 传输文件数据 byte[] buffer = new byte[10240]; int read; while ((read = sourceStream.Read(buffer, 0, buffer.Length)) > 0) { targetStream.Write(buffer, 0, read); } } } } }</code>
使用方法:
<code class="language-csharp">var credentials = new NetworkCredential("user", "password"); var url = "ftp://ftp.example.com/directory/to/download/"; var localPath = @"C:\target\directory"; DownloadFtpDirectory(url, credentials, localPath);</code>
或者,可以考慮使用WinSCP之類的第三方函式庫,它支援遞迴目錄操作,並可以處理各種FTP伺服器格式。
以上是如何使用 C# 從 FTP 伺服器遞歸下載檔案和子目錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!