QFtp不起作用

时间:2013-09-27 19:23:01

标签: qt qtnetwork 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();

它与另一个相同,除了a)这个尝试进一步访问一个目录级别,并且b)我分别声明用户名和密码然后手动登录。我尝试过这样一个给我带来问题的人,但无济于事。

1 个答案:

答案 0 :(得分: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();