2013-09-27 4 views
1

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

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

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

ответ

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(); 
Смежные вопросы