2017-05-03 22 views
1

FTP 서버에 연결하는 코드를 만들었습니다.FileZilla 서버가 NLST 응답에서 폴더 이름을 반환합니다.

제 문제는 일부 서버에 대해 폴더와 파일 이름을 모두 가져 오는 것입니다. myfolder\myfile.txt 및 기타는 myfile.txt입니다.

var request = (FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/myfolder"); 
request.Method = WebRequestMethods.Ftp.ListDirectory; 
var ftpResponse = (FtpWebResponse) request.GetResponse(); 
var ftpResponeStream = ftpResponse.GetResponseStream(); 
var ftpStreamReader = new StreamReader(ftpResponeStream); 

string line; 
while ((line = ftpStreamReader.ReadLine()) != null) 
{ 
    Console.WriteLine(line); 
} 

나는 그 실제 코드를 실행하는 방법이기 때문에 난 그냥 myfile.txt를 얻을 것을 선호하지만, 이것은 FileZilla의 설정 또는 뭔가 다른 경우 나는 모른다.

답변

1

ListDirectory 메서드의 URL은 일반적으로 슬래시로 끝나야합니다.

슬래시를 사용하지 않으면 FTP 서버 구현에 따라 결과가 불확실해질 수 있습니다. ftp://ftp.example.com/parent/folder 같은 URL로


(FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/myfolder/"); 

, 슬래시없이 FtpWebRequest을 수행합니다 일부는하지 않지만

이 경우
CWD /parent 
NLST folder 

, 일부 FTP 서버, 목록에서 folder을 포함한다.

슬래시 동안, FtpWebRequest을 수행합니다이 경우

CWD /parent/folder 
NLST 

이 목록이 노출 된 파일 이름이 포함되어 있습니다.

+1

이 솔루션은 나를 위해 작동하며 두 FTP 서버는 이제 폴더 이름없이 계속 일관되게 결과를 제공합니다. –