Qt之FTP实现-QFtp实例操作

这篇具有很好参考价值的文章主要介绍了Qt之FTP实现-QFtp实例操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

今天具体来根据QFtp写个实例介绍如何在实际项目中使用其相关接口。

主要为了演示接口使用,所以做了个简单的UI,没那么精致,凑合着看。

qt ftp,qt,开发语言,ui,Powered by 金山文档

正文

以上示例包含了FTP登录,为方便演示,本次连接的FTP服务器就是上篇文章中介绍的在windows本机搭建的FTP服务器。Demo功能包括:选择文件夹进行批量上传文件,列举FTP服务器上的所有文件,以及文件实时上传进度 这几个重要功能。其实QFTP还提供了很多其他接口,用法都是差不多的,可以举一反三。

具体接口如下,前面的文章也有介绍过:

int setProxy(const QString &host, quint16 port);
    int connectToHost(const QString &host, quint16 port=21);
    int login(const QString &user = QString(), const QString &password = QString());
    int close();
    int setTransferMode(TransferMode mode);
    int list(const QString &dir = QString());
    int cd(const QString &dir);
    int get(const QString &file, QIODevice *dev=0, TransferType type = Binary);
    int put(const QByteArray &data, const QString &file, TransferType type = Binary);
    int put(QIODevice *dev, const QString &file, TransferType type = Binary);
    int remove(const QString &file);
    int mkdir(const QString &dir);
    int rmdir(const QString &dir);
    int rename(const QString &oldname, const QString &newname);

    int rawCommand(const QString &command);

包含的信号:

Q_SIGNALS:
    void stateChanged(int);
    void listInfo(const QUrlInfo&);
    void readyRead();
    void dataTransferProgress(qint64, qint64);
    void rawCommandReply(int, const QString&);

    void commandStarted(int);
    void commandFinished(int, bool);
    void done(bool);

其他详细接口可以查看qftp.h 源码。

需要注意的是,做这种批量上传,由于上传过程是异步的,我们要让文件一个个的依次上传,就得等前一个文件执行完后再执行下一个文件,所以需要做成同步执行,所以这里就要用到QEventLoop来实现。

然后考虑到文件大小以及内存占用问题,不能直接将文件readAll() 后进行传输。

上传部分代码:

void Widget::on_uploadBtn_clicked()
{
    auto path = ui->folderEdit->text();
    QDir dir(path);
    if(dir.exists()){
        ui->progressBar->setVisible(true);
        auto fileLst = dir.entryInfoList(QDir::Files);
        for(const auto& it : fileLst){

            QFile *file = new QFile(it.filePath(),this);
            if(!file->open(QIODevice::ReadOnly)){
                qDebug() << __FUNCTION__ <<"file open failed.";
                if(m_loop.isRunning())
                    m_loop.exit();
                continue;
            }
            ui->tips->setText(QString::fromLocal8Bit("当前正在上传:") + it.fileName());
            m_ftp.put(file,it.fileName());
            m_loop.exec();
        }
        ui->tips->setText(QString::fromLocal8Bit("已完成所有文件上传"));
    }
}

另外,所有的操作都会有以下两个信号发出

void commandStarted(int);
void commandFinished(int, bool);

操作命令包括:

enum Command {
        None,
        SetTransferMode,
        SetProxy,
        ConnectToHost,
        Login,
        Close,
        List,
        Cd,
        Get,
        Put,
        Remove,
        Mkdir,
        Rmdir,
        Rename,
        RawCommand
    };

比如获取文件列表,commandFinished后就可以去更新UI:

connect(&m_ftp, &QFtp::listInfo, this, [&](QUrlInfo info){
        m_fileList.append(info.name());
    });

    connect(&m_ftp,&QFtp::commandFinished,this,[&](){
        if(m_ftp.currentCommand() == QFtp::List){
            qDebug() << "commandFinished. QFtp::List " << m_fileList ;
            ui->listWidget->addItems(m_fileList);
            if(m_loop.isRunning())
                m_loop.exit();
        }
    });

其他功能可以以此类推。文章来源地址https://www.toymoban.com/news/detail-758137.html

到了这里,关于Qt之FTP实现-QFtp实例操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Linux 网络操作命令FTP

    Linux 网络操作命令FTP

    文件传输协议(FTP)是一种用于在网络上进行文件传输的协议。在Linux系统中,FTP可以作为一个非常有用的工具来上传、下载和管理文件。本文将介绍如何在Linux系统中安装FTP服务器,以及如何使用FTP客户端进行文件传输。 在Linux系统中,常用的FTP服务器软件是vsftpd(Very Sec

    2024年04月25日
    浏览(8)
  • 【Mac本地操作远程FTP】

    【Mac本地操作远程FTP】

    工作中有些项目会有需要链接ftp远程服务器,上传/下载文件,mac安装ftp软件收费,破解也没找到路径。通过问题的(异常名称,卡点日志信息)百度,试一试。网络权限问题一定要检查好,Mac打开防火墙选项,添加允许ftp接入。想到以下两种方式,记录一下,方便以后再

    2024年02月08日
    浏览(3)
  • 简单FTP客户端软件开发——搭建FTP服务器

    简单FTP客户端软件开发——搭建FTP服务器

    计网课程设计的要求是: 1) 该FTP客户端程序具有以下基本功能: 2) 开发美观易用的图形界面 FTP使用客户服务器方式,因为开发的是客户端,所以需要一个FTP服务器,客户端进行连接访问,进行文件操作。 前面我们已经安装好了Linux虚拟机,在Linux搭建FTP服务器原参考博客

    2024年02月03日
    浏览(12)
  • 基于SqlSugar的开发框架循序渐进介绍(26)-- 实现本地上传、FTP上传、阿里云OSS上传三者合一处理

    基于SqlSugar的开发框架循序渐进介绍(26)-- 实现本地上传、FTP上传、阿里云OSS上传三者合一处理

    在前面介绍的随笔《基于SqlSugar的开发框架循序渐进介绍(7)-- 在文件上传模块中采用选项模式【Options】处理常规上传和FTP文件上传》中介绍过在文件上传处理的过程中,整合了本地文件上传和基于FTP方式的上传文件的处理整合。本篇随笔继续介绍文件上传的处理,基于选项

    2023年04月10日
    浏览(12)
  • C# FTP操作(上传、下载等……)

    因为工作中经常涉及到FTP文件的上传和下载,每次有这样的需求时都要重复编写相同的代码,后来干脆整理一个FTPClass,这样不仅方便自己使用,也可以共享给部门其它同事,使用时直接调用就可以了,节省了大家的开发时间。其实这个类网上有很多同样的写法,就算是给自

    2023年04月09日
    浏览(12)
  • Qt5开发及实例V2.0-第七章-Qt图形视图框架

    Qt5开发及实例V2.0-第七章-Qt图形视图框架

    7.1.1 Graphics View的特点 Graphics View框架结构的主要特点如下。 (1)Graphics View框架结构中,系统可以利用Qt绘图系统的反锯齿、OpenGL工具来改善绘图性能。 (2)Graphics View支持事件传播体系结构,可以使图元在场景(scene)中的交互能力提高1倍,图元能够处理键盘事件和鼠标事

    2024年02月07日
    浏览(8)
  • eNSP学习——配置通过FTP进行文件操作

    eNSP学习——配置通过FTP进行文件操作

    原理概述:     FTP(File Transfer Protocol,文件传输协议)是在TCP/IP网络和Internet上最早使用的协议之一,在TCP/IP协议族中属于应用层协议,是文件传输的Internet标准。主要功能是向用户提供本地和远程主机之间的文件传输。     FTP采用C/S结构,FTP server能够提供远程用户端访问

    2024年01月23日
    浏览(9)
  • c# 代码操作ftp服务器文件

    c# 代码操作ftp服务器文件

    好久不见,我又回来了。给大家分享一个最近c#代码操作ftp服务器的代码示例   基础类的构造函数和属性       FtpOperation 中其他的方法 调用示例  贴了半天代码,都不太行,一会能展开,一会展不开,源码地址放下面了。 项目地址:https://github.com/yycb1994/FtpSiteManager

    2024年02月21日
    浏览(10)
  • Qt5开发及实例V2.0-第四章Qt基本对话框

    Qt5开发及实例V2.0-第四章Qt基本对话框

    首先介绍标准文件对话框(QFileDialog)、标准颜色对话框(QColorDialog)、标准字体对话框(QFontDialog)、标准输入对话框(QInputDialog)及标准消息对话框(QMessageBox),运行效果如图4.1所示。 按如图4.1所示依次执行如下操作。 (1)单击“文件标准对话框实例”按钮,弹出“文

    2024年02月07日
    浏览(40)
  • centos 7连接FTP服务器以及常用操作

    yum -y install ftp ftp 10.56.163.251 随后输入用户名和密码 binary lcd /home/TCNY/downloadFTP/ ls 可以看到 ls cd get 文件名 put 文件名 tar -zcvf 压缩后的文件名 要压缩的文件夹

    2024年02月12日
    浏览(7)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包