QFtp源码编译及qt实现ftp服务的三种方式介绍


QFtp源码下载: https://github.com/qt/qtftp

一、QFtp源码编译

以msvc2017编译器为例:Qt5.12.1\5.12.1\msvc2017_64

【1】bin目录下的两个dll文件复制到Qt5.12.1\5.12.1\msvc2017_64\bin目录下;
【2】lib目录下的.lib文件和.prl文件复制到Qt5.12.1\5.12.1\msvc2017_64\lib目录下;然后将.prl文件需要将第一行 QMAKE_PRL_BUILD_DIR 所在行删掉
【3】include目录下的QtFtp文件夹整个复制到Qt5.12.1\5.12.1\msvc2017_64\include目录下。
这里有个坑:

  • 若目录下没有头文件,或include中的qftp.h和qurlinfo.h不是头文件实体,里面只有一句include将源码的头文件分别包含进来,因此还需要把源码src\qftp文件夹下qftp.h和qurlinfo.h两个文件复制覆盖到Qt5.12.1\5.12.1\msvc2017_64\include\QFtp目录中;
  • 同时需要添加无后缀名文件 QFtp,文本打开编辑:#include “qftp.h”。保存之后就可以直接在项目中使用#include <QFtp>

【4】mkspecs\modules-inst目录下的两个.pri文件复制到Qt5.12.1\5.12.1\msvc2017_64\mkspecs\modules目录下。


二、若项目中#include 还报错找不到,则进行一下操作

【5】头文件拷贝至 “Qt5.12.1\5.12.1\msvc2017_64\include\QtNetwork” 下,
【6】同时添加无后缀名文件 QFtp,文本打开编辑:#include "qftp.h",保存。
	@就可以直接在项目中使用#include <QFtp>

三、Qt Ftp实现文件的三种方式及优缺点

注意事项 :FTP上传的数据有两种方式,一种是ASCII码上传,一种是通过二进制数据上传,QNetworkAccessManager 是不能修改上传方式

1、QFtp(Qt4 )

  • QFtp是Qt4中的专门负责Ftp传输的类,Ftp相关的常用接口都已经包含了,比如说:创建目录、删除目录、删除文件、获取文件列表、上传、下载等等常规操作。
  • 被Qt5给抛弃了,取而代之的是用 QNetworkAccessManager 来实现
  • 缺点:要解决编码问题;对于异常处理不是太好,比如突然断网,收不到异常信号,也不会报错,甚至连接状态都不会改变,联网后不能继续上传,会一直假死

2、QNetworkAccessManager(Qt5 )

  • Qt里面专门负责网络请求的模块,包含了http的post、get,还有一个put,而Qt5中要实现Ftp上传功能就通过put来完成
  • 缺点:没有办法通过QNetworkAccessManager 实现Ftp创建目录、删除目录、删除文件、获取文件列表等功能。只能做上传下载操作

3、POCO中的 FTPClientSession

  • 这是​ ​POCO​​中网络模块里面负责实现FTP的类,POCO是目前最流行的C++轻量级封装库之一,里面包含了很多常用的封装库。
  • 缺点:没有提供上传下载进度的接口或回调;通过流的方式获取文件列表,但是文件名称中带有空格那么获取到的文件名就会分开了,不是完整的文件名,比如,有个文件名叫 “abc 12 ed.mp3” ,通过流读取到的内容是 “abc” , “12” , “ed.mp3”
  • 23
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值