Qftp не работает

Я чувствую, что, вероятно, мне не хватает чего-то очень легкого здесь, но я не могу понять, что. У меня есть функция C++ (с Qt 4.7), где мне нужно получить доступ к файлам на FTP-сервере. Для этого у меня настроено следующее:

QString source = "ftp://username:[email protected]/directoryname/";
QFtp *ftp = new QFtp(this);
ftp->connectToHost(source);

connect(ftp, SIGNAL(listInfo(QUrlInfo)), this, SLOT(processInfoFromFile(QUrlInfo)));
connect(ftp, SIGNAL(done(bool)), this, SLOT(finishThisProcess()));

ftp->list();

Когда я ввожу исходный код прямо в браузер, он отображается правильно и показывает мне все файлы внутри каталога. У меня также есть другой экземпляр QFtp (другие имена переменных) в другом месте программы, настроенный таким же образом; это работает. Однако в этом случае он просто интерпретирует каталог source как пустой и сразу же переходит к finishThisProcess. Есть что-то, что мне не хватает? Спасибо!

EDIT: это другой экземпляр ftp-клиента:

ftp2 = new QFtp(this);
QString user = "username";
QString pass = "password";

connect(ftp2, SIGNAL(listInfo(QUrlInfo)), this, SLOT(processInfoFromFile(QUrlInfo)));
connect(ftp2, SIGNAL(done(bool)), this, SLOT(finishThisProcess()));

ftp2->connectToHost("ftp.myftpserver.com");
ftp2->login(user, pass);
ftp2->list();

Это то же самое, что и другое, за исключением того, что а) этот пытается получить доступ к одному уровню каталога выше, и б) я объявил имя пользователя и пароль отдельно, а затем вошёл в систему вручную. Я пробовал тот, который доставлял мне проблемы таким образом, но безрезультатно.


person thnkwthprtls    schedule 27.09.2013    source источник


Ответы (1)


1) Вы должны соединить сигналы и слоты перед соответствующими операторами.

2) Кроме того, вы должны использовать метод входа в систему с именем пользователя и паролем.

Итак, ваш код должен выглядеть так:

QString source = "ftp://ftp.myftpserver.com/directoryname/";
QFtp *ftp = new QFtp(this);

connect(ftp, SIGNAL(listInfo(QUrlInfo)), this, SLOT(processInfoFromFile(QUrlInfo)));
connect(ftp, SIGNAL(done(bool)), this, SLOT(finishThisProcess()));

ftp->connectToHost(source);
ftp->login(username, password);
ftp->list();
person lpapp    schedule 27.09.2013