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>
또는 재귀 디렉터리 작업을 지원하고 다양한 FTP 서버 형식을 처리할 수 있는 WinSCP와 같은 타사 라이브러리를 사용하는 것이 좋습니다.
위 내용은 C#을 사용하여 FTP 서버에서 파일과 하위 디렉터리를 어떻게 재귀적으로 다운로드할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!