2017-05-03 8 views
1

J'ai créé du code qui se connecte à un serveur FTP.Le serveur FileZilla renvoie le nom du dossier dans la réponse NLST

Mon problème est que je contre certains serveurs obtiennent à la fois le dossier et le nom de fichier, par exemple. myfolder\myfile.txt, et d'autres juste obtenir 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); 
} 

Je préférerais que je viens de me myfile.txt parce que c'est la façon dont le code réel devrait fonctionner, mais je ne sais pas, si cela est un paramètre FileZilla ou autre chose.

Répondre

1

L'URL de la méthode ListDirectory doit se terminer par une barre oblique en général.

Sans barre oblique, les résultats ont tendance à être incertains, en grande partie en fonction de l'implémentation du serveur FTP.

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

Avec une URL comme ftp://ftp.example.com/parent/folder, sans la barre oblique, le FtpWebRequest fait:

CWD /parent 
NLST folder 

Dans ce cas, certains serveurs FTP sont les folder dans la liste, alors que certains ne le font pas.

Tandis qu'avec une barre oblique, le FtpWebRequest fait:

CWD /parent/folder 
NLST 

Dans ce cas, la liste comprend les noms de fichiers nus.

+1

La solution fonctionne pour moi, et les deux serveurs FTP maintenant me donne toujours un résultat sans noms de fichiers. –