J'essaie de récupérer une liste de fichiers à partir d'un serveur FTP, mais je reçois des réponses non-ASCII étranges.Récupérer une liste de fichiers d'un serveur FTP en C#
Voici le code que j'utilise:
public string[] getFileList(string mask)
{
if(!logined)
{
login();
}
Socket cSocket = createDataSocket();
this.getSslDataStream(cSocket);
sendCommand("PASV");
sendCommand("LIST " + "*"+mask);
stream2.AuthenticateAsClient(remoteHost,
null,
System.Security.Authentication.SslProtocols.Ssl3 |
System.Security.Authentication.SslProtocols.Tls,
true);
if(!(retValue == 150 || retValue == 125))
{
throw new IOException(reply.Substring(4));
}
StringBuilder mes = new StringBuilder();
while(true)
{
int bytes = cSocket.Receive(buffer, buffer.Length, 0);
mes.Append(ASCII.GetString(buffer, 0, bytes));
if(bytes < buffer.Length)
{
break;
}
}
string[] seperator = {"\r\n"};
string[] mess = mes.ToString().Split(seperator, StringSplitOptions.RemoveEmptyEntries);
cSocket.Close();
readReply();
if(retValue != 226)
{
throw new IOException(reply.Substring(4));
}
return mess;
}
La réponse que je reçois du serveur FTP est la suivante:
WRITE:PASV
READ:227 Entering Passive Mode (10,0,2,24,5,119)`
WRITE:LIST *.dat
READ:150 Opening ASCII mode data connection for /bin/ls.
READ:226 Transfer complete.
Il arrête là. Le tableau de chaînes qu'il retourne contient un index avec des caractères non-ascii. On dirait un tas d'ordures. Peut-être ma partie ASCII.GetString
est faux? Je ne suis pas tout à fait sûr.
Merci d'avance.
Quelle version de .NET Framework utilisez-vous? – Kev
Je suis désolé. 3.5. – Aaron
Juste un commentaire ... Je peux télécharger et télécharger des fichiers correctement. L'inscription et le renvoi de la liste semblent être la seule chose que je ne peux pas faire. J'ai essayé LS, LIST, et NLST. LS n'est pas reconnu pour une raison quelconque, et LIST et NLST font la même chose. – Aaron