webrequestmethods subir remotefile leer ftprequest example create conectar codeproject archivos c# ftp ftpwebresponse

c# - subir - Conectando servidor ftp con credenciales



subir archivos a ftp c# (2)

Estoy escribiendo un programa que usa un servidor ftp con credenciales. Estoy tratando de recuperar la lista de directorios del servidor, pero cuando llego a la línea:

string line = reader.ReadLine();

la cadena que obtengo solo contiene: "No se puede abrir /" host: / lib1 / "."

Si trato de obtener otra línea, se lanza la siguiente excepción: El servidor remoto devolvió un error: (550) Archivo no disponible (por ejemplo, archivo no encontrado, sin acceso).

Sé con certeza (usando otra aplicación ftp) que el directorio ''lib1'' existe en el servidor ftp y mis credenciales (nombre de usuario y contraseña) son correctas.

Aquí está mi código:

public class FTPClient { public string UserName { get; set; } public string Password { get; set; } public string IpAddress { get; set; } public int Port { get; set; } public FTPClient(string _userName, string _password, string _address, int _port) { UserName = _userName; Password = _password; IpAddress = _address; Port = _port; } public void GetDirectoriesList(string _path) { FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri("ftp://" + IpAddress + _path)); request.UseBinary = true; request.Method = WebRequestMethods.Ftp.ListDirectory; request.Credentials = new NetworkCredential(UserName, Password); FtpWebResponse response = (FtpWebResponse)request.GetResponse(); Stream responseStream = response.GetResponseStream(); StreamReader reader = new StreamReader(responseStream); string line = reader.ReadLine(); while (line!=null) { ... //do something with line line = reader.ReadLine(); } ... reader.Close(); response.Close(); }

Y lo uso de la siguiente manera:

FTPClient ftpClient = new FTPClient("user1", "pass1", "192.168.2.110", 21); string dirList = ftpClient.GetDirectoriesList("/lib1");

¿Alguien puede detectar el problema?


Mi solución:

public string[] GetDirectory() { StringBuilder result = new StringBuilder(); FtpWebRequest requestDir = (FtpWebRequest)WebRequest.Create("ftp://urserverip/"); requestDir.Method = WebRequestMethods.Ftp.ListDirectory; requestDir.Credentials = new NetworkCredential("username", "password"); FtpWebResponse responseDir = (FtpWebResponse)requestDir.GetResponse(); StreamReader readerDir = new StreamReader(responseDir.GetResponseStream()); string line = readerDir.ReadLine(); while (line != null) { result.Append(line); result.Append("/n"); line = readerDir.ReadLine(); } result.Remove(result.ToString().LastIndexOf(''/n''), 1); responseDir.Close(); return result.ToString().Split(''/n''); }


Algunos refinamientos a la respuesta de Abdul Waheed:

  • Agregado using bloques para limpiar los objetos FtpWebResponse y StreamReader ;
  • Manipulación de cadena reducida:

    private static string[] GetDirectoryListing() { FtpWebRequest directoryListRequest = (FtpWebRequest)WebRequest.Create("ftp://urserverip/"); directoryListRequest.Method = WebRequestMethods.Ftp.ListDirectory; directoryListRequest.Credentials = new NetworkCredential("username", "password"); using (FtpWebResponse directoryListResponse = (FtpWebResponse)directoryListRequest.GetResponse()) { using (StreamReader directoryListResponseReader = new StreamReader(directoryListResponse.GetResponseStream())) { string responseString = directoryListResponseReader.ReadToEnd(); string[] results = responseString.Split(new string[] { "/r/n", "/n" }, StringSplitOptions.RemoveEmptyEntries); return results; } } }