/// <summary> /// Envía el comando LIST al servidor /// </summary> internal override FtpReply Send() { FtpReply reply = new FtpReply(0); // Asigna la protección Connection.CheckProtection(Parameters.FtpClientParameters.FtpProtection.ControlChannel); // Obtiene los archivos using (Network.FtpStream data = new Network.FtpStreamFactory().OpenDataStream(Connection, FtpClient.FtpTransferMode.Binary)) { // Envía el comando reply = Expect(SendCommand("MLSD", Connection.Server.ServerPlatform.EscapePath(Path.ToString())), 125, 150, 425); // Si ha contestado correctamente, se interpretan los archivos del directorio if (reply.IsSuccess) { using (StreamReader reader = new StreamReader(data.Validated(), Connection.Client.ClientParameters.Encoding)) { string line; // Lee las líneas while ((line = reader.ReadLine()) != null) { AddFileEntry(line); } } } else { data.Abort(); ThrowException(reply); } } // Devuelve la respuesta return(reply); }
/// <summary> /// Obtiene el stream asociado al comando /// </summary> internal Network.FtpStream GetStream() { Network.FtpStream data = new Network.FtpStreamFactory().OpenDataStream(Connection, Mode); FtpReply reply = Send(); // Comprueba el stream antes de devolverlo if (!reply.IsSuccess) { // Limpia el stream data.Abort(); // Lanza la excepción ThrowException(reply); // Anula el stream de datos return(null); } else // Devuelve el stream de datos (si se ha podido asignar) { return(data.Validated()); } }
/// <summary> /// Envía el comando LIST al servidor /// </summary> internal override FtpReply Send() { FtpReply reply = new FtpReply(0); Platform.FtpPlatform platform; // Obtiene la plataforma antes que nada porque puede que envíe un comando SYST por otro canal platform = Connection.Server.ServerPlatform; // Se cambia de stream (para enviar un comando PORT) using (Network.FtpStream data = new Network.FtpStreamFactory().OpenDataStream(Connection, FtpClient.FtpTransferMode.Binary)) { // Envía el comando LIST reply = Expect(SendCommand("LIST", platform.EscapePath(Path.ToString())), 125, 150, 425); // Si se ha respondido correctamente, se obtienen los datos if (reply.IsSuccess) { using (StreamReader reader = new StreamReader(data.Validated(), Connection.Client.ClientParameters.Encoding)) { string line; // Lee las líneas creando los archivos while ((line = reader.ReadLine()) != null) { Files.Add(platform.Parse(line, Path)); } } } else // ... y si no, se cierra el stream y se lanza una excepción { data.Abort(); ThrowException(reply); } } // Devuelve la respuesta return(reply); }