qtftp 客户端
今天上午看了看FTP网络,但是当添加头文件时发现qt creater并不包括此头文件,于是找了一下资料发现:在QT5上将QFtp去掉了,建议使用QNetworkAccessManager,但是后者并没有完全继承前者的所有方法,如果要想使用FTP怎么办?下面看一下我的解决方案:
首先到网站上下载QFtp的源码,我把它放在了我的博客里面-->点击这里
说明一下:我的环境是vs2012+qt
打开下载好的源码。可以看到如下结构树:

下载的文件包括例子,源码和测试
双击qftp.pro文件,将CONFIG两个选项更改如下:

然后编译运行显示如下

放心,这并不是错误,因为生成的是链接库,并不是可执行程序,所以不会运行,能运行就坏了。
这时候在编译路径下面会看到产生的链接库文件吐下所示:

然后将Qt5Ftpd.lib、Qt5Ftp.lib、Qt5Ftpd.prl、Qt5Ftp.prl拷贝到qt路径下msvc的lib文件夹下
Qt5Ftpd.dll、Qt5Ftp.dll拷贝到qt路径下msvc的bin文件夹下
qftp.h、qurlinfo.h拷贝到qt路径下msvc的include下的QTnetwork文件夹下,最后新建一个没有后缀名上午文件,写入#include“qftp.h”.
此时,qt项目中就可以使用qftp了。
下面看一下qt c++高级编程中的一个使用命令行下载ftp文件的一个客户端例子。
首先新建一个控制台应用程序。
main函数如下书写
#include <QCoreApplication>
#include "ftpget.h"
#include <QStringList>
#include <iostream>
/*
* 新建一个控制台应用程序,避免连接到Gui界面库
* time:2017.6.20
*/
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
QStringList args=QCoreApplication::arguments();//获取命令行参数作为一个qstringList列表
if( != args.count()){
std::cout<<"Usage ftp url"<<std::endl
<<"Example:"<<std::endl
<<"ftpget ftp://ftp.trolltech.com/mirrrors"
<<std::endl;
return ;
}
FtpGet getter;//ftp类
if(!getter.getFile(QUrl(args[])))//获取url地址
return ;
QObject::connect(&getter,SIGNAL(done()),&app,SLOT(quit())); return app.exec();
}
另外新建一个FtpGet类,继承于QObject头文件如下:
#ifndef FTPGET_H
#define FTPGET_H #include <QObject>
#include <QFtp>
#include <QFile>
#include <QUrl> class FtpGet : public QObject
{
Q_OBJECT
public:
explicit FtpGet(QObject *parent = );
bool getFile(const QUrl &url); signals:
void done(); public slots:
void ftpDone(bool error);
private:
QFtp ftp;
QFile file;
}; #endif // FTPGET_H
源文件如下:
#include <iostream>
FtpGet::FtpGet(QObject *parent) : QObject(parent)
{
connect(&ftp,SIGNAL(done(bool)),this,SLOT(ftpDone(bool)));
}
bool FtpGet::getFile(const QUrl &url){
if(!url.isValid()){
std::cerr<<"Error:Invalid URL"<<std::endl;
return false;
}
if("ftp" != url.scheme()){
std::cerr<<"Error:URL must start with 'ftp:'"<<std::endl;
return false;
}
if(url.path().isEmpty()){
std::cerr<<"Error:URLhas no path"<<std::endl;
return false;
}
QString localFileName= QFileInfo(url.path()).fileName();
if(localFileName.isEmpty())localFileName="ftpget.out";
file.setFileName(localFileName);
if(!file.open(QIODevice::WriteOnly)){
std::cerr<<"Error:cont`t write file"
<<qPrintable(file.fileName())
<<":"<<qPrintable(file.errorString())<<std::endl;
return false;
}
ftp.connectToHost(url.host(),url.port()); ftp.login();
ftp.get(url.path(),&file);
ftp.close(); return true;
}
void FtpGet::ftpDone(bool error){
if(error){
std::cerr<<"error:"<<qPrintable(ftp.errorString())<<std::endl;
}else{
std::cerr<<"File downloaded as:"<<qPrintable(file.fileName())<<std::endl;
}
file.close();
emit done();
}
运行后,显示如下图所示:

qtftp 客户端的更多相关文章
- 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付
前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...
- 支持 .NET Core 的 Memcached 客户端 EnyimMemcachedCore
1. 介绍 EnyimMemcachedCore 是一个支持 .NET Core 的 Memcached 客户端,是从 EnyimMemcached 迁移至 .NET Core的,源代码托管在 Git ...
- 消息队列 Kafka 的基本知识及 .NET Core 客户端
前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息 ...
- Socket聊天程序——客户端
写在前面: 上周末抽点时间把自己写的一个简单Socket聊天程序的初始设计和服务端细化设计记录了一下,周二终于等来毕业前考的软考证书,然后接下来就是在加班的日子度过了,今天正好周五,打算把客户端的详细 ...
- 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。
异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...
- zookeeper源码分析之三客户端发送请求流程
znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...
- zookeeper源码分析之二客户端启动
ZooKeeper Client Library提供了丰富直观的API供用户程序使用,下面是一些常用的API: create(path, data, flags): 创建一个ZNode, path是其 ...
- PHP获取客户端IP
/** * 获取客户端IP */ function getClientIp() { $ip = 'unknown'; $unknown = 'unknown'; if (isset($_SERVER[ ...
- 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)
搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...
随机推荐
- Python 基础语法+简单地爬取百度贴吧内容
Python笔记 1.Python3和Pycharm2018的安装 2.Python3基础语法 2.1.1.数据类型 2.1.1.1.数据类型:数字(整数和浮点数) 整数:int类型 浮点数:floa ...
- hanlp提取文本关键词的使用方法记录
本文是csu_zipple 分享的关于使用hanlp汉语言处理包提取关键词的过程一个简单的记录分享.想要使用hanlp提取文本关键词的新手朋友们可以参考学习一下! 如何在一段文本之中提取出相应的关键词 ...
- pyhanlp 停用词与用户自定义词典功能详解
hanlp的词典模式 之前我们看了hanlp的词性标注,现在我们就要使用自定义词典与停用词功能了,首先关于HanLP的词性标注方式具体请看HanLP词性标注集. 其核心词典形式如下: 自定义词典 自定 ...
- htmlcleaner使用及xpath语法初探
一.HtmlCleaner使用: 1.HtmlCleaner HtmlCleaner是一个开源的Java语言的Html文档解析器.HtmlCleaner能够重新整理HTML文档的每个元素并生成结构良好 ...
- Kafka研究【一】:bring up环境
kafka是干什么的,有和特性,我这里就不多说,详情自己研究官方文档. 0. 背景介绍 我需要在三台机器上分别部署kafka broker的实例,构建成一个集群.kafka的broker集群,是基于z ...
- Visual Studio搭建Python开发环境
一.搭建开发环境 1.创建工程: 2.下载环境: 创建好工作以后,点击运行,就会出现下面这个界面,然后点击下载,并安装 http://jingyan.baidu.com/article/fec4bce ...
- uoj#272. 【清华集训2016】石家庄的工人阶级队伍比较坚强
http://uoj.ac/problem/272 这题的式子形式是异或卷积的三进制推广,因此可以设计一个类似fwt的变换,这里需要一个三次单位根$w$,满足$w^3\%p==1$且$(1+w+w^2 ...
- JAVA代码模板总结
静态工厂方法+服务提供者框架模板 构造器模板 事件通知模板 单元素枚举类型singleton模块 私有构造器不可实例化类模板
- Java学习——Applet写字符串(调字体)
import java.awt.*; import java.applet.Applet; public class GUI2 extends Applet{ public void paint(Gr ...
- [转][Java]尝试解决Java多行字符串的编辑问题
转自:https://blog.csdn.net/jiuwuerliu/article/details/51207045 参考了:https://www.v2ex.com/amp/t/445522 除 ...