예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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());
            }
        }
예제 #3
0
        /// <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);
        }