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 중국어 웹사이트의 기타 관련 기사를 참조하세요!