Qt4下Qt提供了QFtp类以完成FTP相关的操作,但是Qt5不再提供QFtp类了,取而代之的是QNetworkAccessManager,QNetworkRequest和QNetworkReply等类。那么Qt5的network模块能否替代QFtp等类呢?
测试后发现,如果利用QNetworkRequest封装诸如: ftp://ftp.jaist.ac.jp/pub/qtproject/official_releases/jom/jom_0_6_08.zip以通过FTP下载某一个特定的文件是可以做到的;但是类似原int QFtp::list(const QString & dir = QString())这些接口的功能就无法完成了。
在Stack Overflow上找了答案,确认Qt5下的QNetworkAccessManager等模块无法替代QFtp等模块。
翻译如下:
标题:Qt编码并利用QNetworkAccessManager从FTP服务器上获取文件列表
问题:我正在用Qt编写一个FTP客户端程序,用的是Qt 5.0版本。
我已经通过QNetworkAccessManager实现了上传和下载文件功能,之所以不用QFtp是因为Qt5下QFtp已被废除了。
现在我想编码实现从FTP服务器获取文件列表,我知道在QFtp类下的具体做法但是不知道怎样利用QNetworkAccessManager完成这个功能,给个建议吧。
回答:如果你想从一个远程目录获取文件列表的话,你还是需要用QFtp,因为目前QNetworkAccessManager还无法做到。
QFtp已经作为一个独立模块分离出去了,但是你可以从Gitorious仓库中下载:https://qt.gitorious.org/qt/qtftp (点击 "Source tree",然后点击"Download master..."以下载该模块)。
注:实际上到了Qt 5.10了还是无法完成对QFtp的替代,我目前考虑利用libcurl完成该功能......