可以使用Qt的QNetworkAccessManager和QNetworkReply类来实现获取FTP服务器某个文件夹下的文件列表。
示例代码:
QStringList getFileListFromFtp(QString host, QString user, QString password, QString path)
{
QStringList fileList;
// 创建一个QUrl对象,指定要连接的FTP服务器地址、用户名和密码
QUrl url;
url.setScheme("ftp");
url.setHost(host);
url.setUserName(user);
url.setPassword(password);
// 指定要获取文件列表的路径
if (!path.isEmpty())
url.setPath(path);
// 创建一个QNetworkRequest对象,设置URL并指定FTP协议
QNetworkRequest request(url);
request.setAttribute(QNetworkRequest::ProtocolAttribute, QVariant("ftp"));
// 使用QNetworkAccessManager发送GET命令请求获取文件列表
QNetworkAccessManager manager;
QNetworkReply *reply = manager.get(request);
// 等待回复完成,即数据接收完毕
while (!reply->isFinished())
qApp->processEvents();
// 从回复中解析出文件列表
if (reply->error() == QNetworkReply::NoError) {
QByteArray data = reply->readAll();
QStringList lines = QString(data).split("\n");
for (int i = 0; i < lines.size(); i++) {
QString line = lines.at(i).trimmed();
if (line.endsWith("."))
continue; // 过滤掉当前目录和上级目录项
QStringList parts = line.split(" ");
if (parts.size() > 8) {
fileList.append(parts.last());
}
}
}
// 回收资源
reply->deleteLater();
return fileList;
}
调用方法:
QStringList fileList = getFileListFromFtp("ftp.example.com", "user", "password", "/path/to/folder");
qDebug() << fileList;
注意:需要在.pro文件中添加QT += network才能使用QNetworkAccessManager类。