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();