我觉得我可能在这里错过了一些很容易的东西,但我不知所措。我有一个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();
它与另一个相同,除了 a)这个尝试访问更远的一个目录级别,以及 b)我分别声明了用户名和密码,然后手动登录。我尝试了以这种方式给我解决问题的人,但无济于事。
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();