2015-12-02 2 views
0

Я нашел один код очень полезным, но следующий код возвращает имена каталогов и файлов с одного FTP-сервера, мне нужно получить только имена файлов.FtpWebRequest возвращает только имена файлов с ListDirectoryDetails

ftpRequest = (FtpWebRequest) FtpWebRequest.Create(host + "/" + directory); 
/* Log in to the FTP Server with the User Name and Password Provided */ 
ftpRequest.Credentials = new NetworkCredential(user, pass); 
/* When in doubt, use these options */ 
ftpRequest.UseBinary = true; 
ftpRequest.UsePassive = true; 
ftpRequest.KeepAlive = true; 
/* Specify the Type of FTP Request */ 
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory; 
/* Establish Return Communication with the FTP Server */ 
ftpResponse = (FtpWebResponse) ftpRequest.GetResponse(); 
/* Establish Return Communication with the FTP Server */ 
ftpStream = ftpResponse.GetResponseStream(); 
/* Get the FTP Server's Response Stream */ 
StreamReader ftpReader = new StreamReader(ftpStream); 
/* Store the Raw Response */ 
string directoryRaw = null; 
/* Read Each Line of the Response and Append a Pipe to Each Line for Easy Parsing */ 
try{ 
    while (ftpReader.Peek() != -1){ 
     directoryRaw += ftpReader.ReadLine() + "|"; 
    } 
} 
catch(Exception ex) 
{ 
     //Do something 
} 
... 
... 
... 

Я исследую, но WebRequestMethods.Ftp имеет только ListDirectory и ListDirectoryDetails, возвращают имена каталогов и файлов :(..

Кто-то может мне помочь ..

Благодарности

+0

Не можете ли вы использовать ['Path.GetFileName'] (https://msdn.microsoft.com/library/system.io.path.getfilename%28v=vs.110%29.aspx)? – cubrr

+0

Где ?, на FTP? Я думаю, что GetFileName для локальных файлов – VhsPiceros

+0

Попробуйте 'Path.GetFileName (" ftp://127.0.0.1/folder/filename.txt ")': o) – cubrr

ответ

0

ListDirectory выдает команду NLST на сервер, который только возвращает имена файлов.

ListDirectoryDetails вызывает команду LIST на сервер, который обычно возвращает имена файлов с подробной информацией.

Но это, в конечном счете, до сервера, что он возвращает. Если он возвращает имена файлов только для обоих, FtpWebRequest ничего не может с этим поделать.

Возможно, сервер поддерживает команду MLSD, чтобы возвращать данные файла, но FtpWebRequest не поддерживает это. Другое альтернативное использование для использования GetFileSize и GetDateTimestamp для каждого файла отдельно. Но это медленно.

См. Также мой ответ на Retrieving creation date of file (FTP).