> 백엔드 개발 > 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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿