QFtp не будет работать

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

QString source = "ftp://username:password@ftp.myftpserver.com/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, Я что-то упускаю? Спасибо!

РЕДАКТИРОВАТЬ: это другой экземпляр клиента 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();

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

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();
Другие вопросы по тегам