You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QT5.14中使用QNetworkAccessManager调用FTP LIST命令失败求助

问题原因与解决方法

你的问题出在两个关键地方:

  • 错误使用get()方法获取FTP目录列表,QT中get()仅用于下载文件,访问目录会触发"is a directory"错误
  • 手动设置Command请求头属于画蛇添足,QT会根据调用的方法自动处理FTP命令

修正后的代码

QUrl url;
url.setScheme("ftp");
url.setPort(21);
url.setUserName(ui->userName->text());
url.setPassword(ui->password->text());
url.setHost(ui->FtpAdd->text());
url.setPath("/hdd/"); // 补全字符串引号,原代码存在语法错误
url.setQuery("type=i");

QNetworkRequest request(url);
// 移除手动设置Command头的代码
QNetworkReply *reply = networkAM->list(request); // 用list()替代get()

connect(reply, &QNetworkReply::finished, this, [=]() {
    if (reply->error() == QNetworkReply::NoError) {
        qDebug() << "Connected to FTP server successfully!";
        QByteArray data = reply->readAll();
        qDebug() << data;
    } else {
        qDebug() << "Failed to connect to FTP server. Error:" << reply->errorString();
    }
    reply->deleteLater();
    qDebug() << url;
});

关键说明

  1. 使用list()方法:QT的QNetworkAccessManager针对FTP协议提供了list()接口,专门用于获取目录内容,它会自动发送LIST命令,无需手动设置请求头。
  2. 移除多余请求头:手动设置Command头会干扰QT内部的FTP命令处理逻辑,直接删除即可。
  3. 修正路径语法:原代码中url.setPath(/hdd/);缺少字符串引号,属于语法错误,必须改为带引号的字符串格式。

内容的提问来源于stack exchange,提问作者overover

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 22:55:21