今天上午看了看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 客户端的更多相关文章

  1. 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付

    前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...

  2. 支持 .NET Core 的 Memcached 客户端 EnyimMemcachedCore

    1. 介绍 EnyimMemcachedCore 是一个支持 .NET Core 的 Memcached 客户端,是从 EnyimMemcached 迁移至 .NET Core的,源代码托管在 Git ...

  3. 消息队列 Kafka 的基本知识及 .NET Core 客户端

    前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息 ...

  4. Socket聊天程序——客户端

    写在前面: 上周末抽点时间把自己写的一个简单Socket聊天程序的初始设计和服务端细化设计记录了一下,周二终于等来毕业前考的软考证书,然后接下来就是在加班的日子度过了,今天正好周五,打算把客户端的详细 ...

  5. 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...

  6. zookeeper源码分析之三客户端发送请求流程

    znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...

  7. zookeeper源码分析之二客户端启动

    ZooKeeper Client Library提供了丰富直观的API供用户程序使用,下面是一些常用的API: create(path, data, flags): 创建一个ZNode, path是其 ...

  8. PHP获取客户端IP

    /** * 获取客户端IP */ function getClientIp() { $ip = 'unknown'; $unknown = 'unknown'; if (isset($_SERVER[ ...

  9. 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)

    搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...

随机推荐

  1. kafka重复数据问题排查记录

    问题 向kafka写数据,然后读kafka数据,生产的数据量和消费的数据量对不上. 开始怀疑人生,以前奠定的基础受到挑战... 原来的测试为什么没有覆盖生产量和消费量的对比? 消费者写的有问题?反复检 ...

  2. PHP性能监测的工具介绍 - XHProf -参考自https://jingyan.baidu.com/article/7082dc1c173359e40a89bd95.html

    XHProf 这个软件本是Facebook内部的一个应用工具,2009年3月份开源,为PHP的性能监测提供了很好的工具.官方的介绍中提到: 方法/步骤     XHProf 这个软件本是Faceboo ...

  3. Thinkphp 视图模型

    1.创建视图模型 2.定义视图模型 class BlogViewModel extends ViewModel { public $viewFields = array( 'Blog'=>arr ...

  4. phoenix psqlline输入命令无法删除问题解决技巧

    一.引言: phoenix psqlline使用过程中,使用CRT客户端,命令输入后无法删除,想起曾经处理HBaseShell输入后无法删除的解决办法,尝试了一下,居然有效,还是分享给大家把. 二.操 ...

  5. svn项目清除svn链接信息

    如果copy的项目原来有svn连接信息,测试新技术新方案时可能会有隐患,不小心上传svn很造成很多麻烦. 这时先删除svn连接是比较好的选择. 删除svn的方法是删除项目根目录下的.svn文件夹.这个 ...

  6. LeetCode——18. 4Sum

    一.题目链接:https://leetcode.com/problems/4sum/ 二.题目大意: 给定一个数组A和一个目标值target,要求从数组A中找出4个数来使之构成一个4元祖,使得这四个数 ...

  7. 【事务隔离级别】数据库事务隔离级别-UNDERSTANDING ISOLATION LEVELS

    参考链接:ISOLATION LEVELS ISOLATION LEVELS In a database system, concurrent transactions are processed i ...

  8. PAT 乙级 1068 万绿丛中一点红(20 分)

    1068 万绿丛中一点红(20 分) 对于计算机而言,颜色不过是像素点对应的一个 24 位的数值.现给定一幅分辨率为 M×N 的画,要求你找出万绿丛中的一点红,即有独一无二颜色的那个像素点,并且该点的 ...

  9. requests 请求几个接口 出现’您的账户在其它设备使用过,为保障安全,需重新登入才能在本设备使用‘

    因为接口和接口直接有个字段是关联的 在登陆请求后,后台响应了个token,下面的请求 ,请求头要带上这个token 才认为是登陆后 的操作

  10. 配置Flink依赖的pom文件时报错:flink-clients_2.11 & flink-streaming-java_2.11

    在配置eclipse上的pom文件时,在配置到flink-clients_2.11 和 flink-streaming-java_2.11这两个jar包的时候不管怎么弄都报错而且包一大堆错. 最难受的 ...