QFtp 调用list函数,listInfo没有反应的问题

QT5之后官方去除了QFtp,但仍可以按照网上的方法自行编译,这里不赘述。

前几日用QFtp自行写了客户端和服务端进行交互,发现客户端调用list()函数的时候,无法获取文件的目录和名字等相关信息,其他的操作,上传下载什么的都正常。
起初以为是服务端代码有问题,于是尝试用 FileZilla 连接,发现连接上后功能一切正常。
上网找了许久未果,直到看到了一个网友的评论。

ChampagneYo :原因是QFtp类里面的parseDir函数的正则表达式与FTP服务器类型不同,需要修改这个类。

于是仔细翻看客户端的QFtp的相关函数,发现果然如此,QFtp并没有实现windows上的正则表达式,如下:

bool QFtpDTP::parseDir(const QByteArray &buffer, const QString &userName, QUrlInfo *info)
{   
	// Unix style FTP servers
    QRegExp unixPattern(QLatin1String("^([\\-dl])([a-zA-Z\\-]{9,9})\\s+\\d+\\s+(\\S*)\\s+"
                                      "(\\S*)\\s+(\\d+)\\s+(\\S+\\s+\\S+\\s+\\S+)\\s+(\\S.*)"));
    if (unixPattern.indexIn(bufferStr) == 0) {
        _q_parseUnixDir(unixPattern.capturedTexts(), userName, info);
        return true;
    }

    // DOS style FTP servers
    QRegExp dosPattern(QLatin1String("^(\\d\\d-\\d\\d-\\d\\d\\d?\\d?\\ \\ \\d\\d:\\d\\d[AP]M)\\s+"
                                     "(<DIR>|\\d+)\\s+(\\S.*)$"));
    if (dosPattern.indexIn(bufferStr) == 0) {
        _q_parseDosDir(dosPattern.capturedTexts(), userName, info);
        return true;
    }

    return false;
}

这个函数是通过正则表达式,将相对应的数据取出的。
我们可以设计自己的正则表达式,也可以用 QString 的分割截取等操作来实现自己的效果。
具体怎么操作,可以自行打印 buffer 参数,服务端传来的数据都在里面。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
QFtplistInfo函数用于获取指定路径下的文件和文件夹信息。它不接受任何参数,而是通过调用list函数来指定要获取信息的路径。 在调用list函数之后,你需要等待QFtp发出listInfo信号,然后通过listInfo函数来获取文件和文件夹的详细信息。 以下是一个示例代码,展示如何使用QFtplistlistInfo函数来获取文件和文件夹的信息: ```cpp #include <QCoreApplication> #include <QFtp> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QFtp ftp; ftp.connectToHost("your_ftp_server_address"); ftp.login("username", "password"); // 指定要获取信息的路径 QString directoryPath = "/path/to/your/directory"; ftp.list(directoryPath); // 等待列表信息的信号 QEventLoop loop; QObject::connect(&ftp, &QFtp::listInfo, &loop, &QEventLoop::quit); loop.exec(); // 获取文件和文件夹的详细信息 QList<QUrlInfo> infoList = ftp.listInfo(); for (const QUrlInfo &info : infoList) { qDebug() << "Name:" << info.name(); qDebug() << "Is Directory:" << info.isDir(); qDebug() << "Size:" << info.size(); qDebug() << "Last Modified:" << info.lastModified().toString(); qDebug() << "-----------------------------------------"; } ftp.close(); return a.exec(); } ``` 请注意,你需要替换示例代码中的以下部分: - "your_ftp_server_address":替换为你的FTP服务器地址。 - "username" 和 "password":替换为你的FTP登录凭据。 - "/path/to/your/directory":替换为你要获取信息的文件夹路径。 这样,你就可以使用QFtplistlistInfo函数来获取文件和文件夹的详细信息了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值