今天上午看了看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. 使用FormsAuthenticationTicket进行登陆验证

    if (账号密码验证成功) { //登陆成功 Session["User"] = account; FormsAuthenticationTicket ticket = new F ...

  2. 基于CRF序列标注的中文依存句法分析器的Java实现

    这是一个基于CRF的中文依存句法分析器,内部CRF模型的特征函数采用 双数组Trie树(DoubleArrayTrie)储存,解码采用特化的维特比后向算法.相较于<最大熵依存句法分析器的实现&g ...

  3. Linux之chown

    命令功能: chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID:组可以是组名或者组ID:文件是以空格分开的要改变权限的文件列表,支持通配符.系统管理员经常使用chown命令, ...

  4. LB+nginx+tomcat7集群模式下的https请求重定向(redirect)后变成http的解决方案

    0. 环境信息 Linux:Linux i-8emt1zr1 2.6.32-573.el6.x86_64 #1 SMP Wed Jul 1 18:23:37 EDT 2015 x86_64 x86_6 ...

  5. flume 前世今生

    Cloudera 开发的分布式日志收集系统 Flume,是 hadoop 周边组件之一.其可以实时的将分布在不同节点.机器上的日志收集到不同的存储系统.Flume 初始的发行版本目前被统称为 Flum ...

  6. js for dwg viewer in B/S

    https://github.com/autodesk-forge/ https://sharecad.org/zh/DWGOnlinePlugin http://3d-viewers.com/lic ...

  7. MySQL 使用profile分析慢sql,group left join效率高于子查询

    MySQL 使用profile分析慢sql,group left join效率高于子查询 http://blog.csdn.net/mchdba/article/details/54380221 -- ...

  8. 代码编辑器之notepad++

    引用及下载地址:http://www.iplaysoft.com/notepad-plus.html NotePad++ 优秀的支持语法高亮的开源免费编辑器绿色版下载 EditPlus,它始终是一款收 ...

  9. 安装老版本redis .NET 客户端

    https://github.com/ServiceStackV3/ServiceStackV3 PM> Install-Package ServiceStack -Version 3.9.71 ...

  10. VB编程插件AmicForVB插件

    VB编程插件AmicForVB插件下载地址http://www.vbgood.com/thread-32788-1-1.htmlhttp://www.vbgood.com/forum.php?mod= ...