1

我觉得我可能在这里遗漏了一些非常容易的东西,但我不知道是什么。我有一个 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)我分别声明了用户名和密码,然后手动登录。我尝试了以这种方式给我带来问题的方法,但无济于事。

4

1 回答 1

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();
于 2013-09-27T19:44:11.937 回答