Como usar FTP

Hola, estoy empezando a trabajar con qt, y desearia ayuda o informacion acerca del uso de ftp con qt creator, he intentado usar la informacion que viene en la documentacion de qt pero no he logrado hechar a andar ningun programa de ftp, espero me puedan ayudar.

FTP

busca aqui en este foro QNetworkReply he posteado el codigo ahi veraz todo lo que necesitas trabaja muy bien

ftp

pues la verdad probe y nada
lo solucione utilizando las clases que dice ahi en la documentacion
QNetworkAccessManager,QNetworkReply,QNetworkRequest
mira y si algo te posteo algo de codigo

ftp

me puse a analizar para no quedarme con la duda y ya funciona
lo que pasa es que el baja el archivo de forma asincronica lo que debes hacer es lo siguiente

QString createfile="install.txt";
    file->setFileName(createfile);
    file->open(QIODevice::WriteOnly);
 
    ftp->connectToHost("ftp.qt.nokia.com");   // id == 1
    ftp->login();                             // id == 2
    ftp->cd("qt");                            // id == 3
    ftp->get("INSTALL");                      // id == 4
 
bool f_main::ftpDone(bool error)
{
    if (error && ftp->errorString() != ""){
        //db.lastError(http->errorString());
        qDebug()<<"Error: " << ftp->errorString();
    }
    else{
        qDebug()<<"bytes"<<ftp->bytesAvailable();
        file->write(ftp->readAll());
        file->close();
        ftp->close();
}
}

ah y debes colocar en el constructor de la clase
ftp = new QFtp;
    file = new QFile(this);
    connect(ftp,SIGNAL(done(bool)),this,SLOT(ftpDone(bool)));

todo esto en el cpp. y en el .h
private:
    QFile *file;
    QFtp *ftp;
signals:
  void done(bool);
public slots:
  bool ftpDone(bool);

Gracias

Hola amigo, muchas gracias tu codigo me ha servido, por fin he podido bajar el archivo, realmente te lo agradesco, ya me habia deseperado, solo unas preguntas mas, si me podrias explicar que hace tu funcion ftpDone, no entiendo muy bien el qdebug, me marcaba error al ejecutarlo en el qtcreator, pero lo puse como comentario y funciono bien, y tambien el signal done, y si seria este codigo semejante para que yo envie un archivo a un servidor ftp que en este caso podria ser alguna direccion de mi compu.

Disculpa por las molestias amigo, y muchas gracias otra vez.

ftp

ok estamos para ayudarnos asi tambien aprendemos,
bueno mira si te lees la documentación dice algo así como que
void QFtp::done ( bool error ) [signal]
que done es una señal de QFtp
Esta señal se emite cuando el comando pendiente ha terminado, es decir, cuando termina de bajar el archivo (que se emite después de la última orden de commandFinished () de la señal). el error es verdadero(true) si ocurre un error durante el proceso, de lo contrario el error es falso.
el qDebug() es para que me muestre en la pestaña de aplicación output lo que pasa o los valores que lleva por ejemplo una variable etc.
para enviar si seria parecido pero la funcion no seria get si no put hechale una leida a todas las funciones y señales de la ayuda ni no puedes con el ingles traducelo en google
saludos y muchos exitos

enviar a ftp

Hola amigo, molestando nuevamente, he estado intentando enviar por ftp, pero tengo algunas dudas con ls funcion put, quisiera saber mas que nada que es el QIODevice, ya que es una variable que pide la funcion, en este caso que tendria que poner ahi, y otra duda seria en el caso de enviar un archivo txt, tendria que leer el archivo linea por linea y con cada linea irla subiendo o como lo haria, disculpa por las molestias de nuevo. gracias

put ftp

es igual a lo que hiciste demaciado facil googleando un poco lo hubieras encontrado
de todas formas te coloco el ejemplo
bool putFile::putFile(const QString file)
{
QMessageBox msgBox;
QString fileName="install.exe";
ftp->connectToHost("tu host");
if (!ftp->login("usuario","usuario")){
qDebug()<<"no conect";
return false;
}
QFile *fileftp = new QFile( fileName );
QFileInfo fi( fileName );
ftp->put(fileftp,"install.exe", QFtp::Binary);
return true;
}

lo mismo que en el anterior ejemplo te hablo de el ejemplo anterior
te hablo de las funciones done y dataTransferProgress

saludos estamos para servir a todos
buen dia

gracias

Gracias amigo por tu pronta respuesta, lo voy a chekar y te comento, gracias nuevamente.

QFtp es "asíncrono"

Hola.
Yo también me he peleado bastante con el QFtp.
Lo que me costó entender es que las llamadas tipo

ftp->connectToHost("ftp.mydominio.com");
ftp->login();
etc

son llamadas asíncronas. Es decir lo ideal sería/es esperar a que cada llamada termine antes de hacer la siguiente, y la forma de hacerlo es, probablemente con la usando la señal commandFinished.

Salud.

ftp asinconp

lo mismo pensé yo pero la verdad si conectas esa señal y pones un qDebug()<<"algo";
notaras que mientras el archivo esta bajando pasa por ahí a todo momento, lo que puedes hacer,
es conectar la señal dataTransferProgress con un progress dialog, es algo así en el archivo .h
private:
QProgressDialog *progressDialog;

public slots:
void dataTransferProgress ( qint64 done, qint64 total );

luego en el archivo .cpp en el constructor colocas esto.

connect(ftp,SIGNAL(dataTransferProgress(qint64,qint64)),this,SLOT(dataTransferProgress(qint64,qint64)));
progressDialog = new QProgressDialog();

y por ultimo el slot (ojo esto es por fuera del constructor)
void getFtpFile::dataTransferProgress(qint64 done, qint64 total)
{
progressDialog->setMaximum(total);
progressDialog->setValue(done);
}

de esta forma te mostrara el progreso de descarga no estoy seguro pero creo que es asi
saludos

ftp

postea tu codigo yo miro que tienes mal

ftp

Hola amigo, disculpa la tardanza de la respuesta, mira te pongo mi codigo:

#include "widget.h"
#include "ui_widget.h"
#include <QtNetwork>
#include <QFtp>
 
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}
 
Widget::~Widget()
{
    delete ui;
}
 
void Widget::on_btn_1_clicked()
{
    QFtp *ftp = new QFtp(this);
    ftp->connectToHost("ftp.qt.nokia.com");
    ftp->login();
    ftp->connectToHost("ftp.qt.nokia.com");   // id == 1
    ftp->login();                             // id == 2
    ftp->cd("qt");                            // id == 3
    ftp->get("INSTALL");                      // id == 4
    ftp->close();                             // id == 5
}

Estoy haciendo el ejemplo simple de la documentacion, se supone que debe descargar un archivo cuando aprieto un boton, pero no hace nada, estoy usando qt creator. espero tu me puedas ayudar, gracias.

ftp

hola
lo que quieres es hacer un programa que se conecte y bajar archivos o que real mente?
en la pagina http://qt-apps.org/ hay algunos desarrollados

ftp

sip quiero hacer un programa que haga lo que me dices, como mensionaba he intentado hacer los ejemplos que vienen en la doc pero no logro haceros funcionar, si pudieras explicarme como hacerlo te lo agradeceria.

Anuncios Google