Qt之QFtp
来源:互联网 发布:入门级电吉他推荐 知乎 编辑:程序博客网 时间:2024/05/29 10:11
编译好QFtp之后(点击打开链接),用QFtp实现下载功能
一、使用windows本机搭建好FTP服务器
参照:windows如何搭建FTP服务器
搭建好服务器是关键,搭建完之后才有下面的操作。
ftp->connectToHost("192.168.0.104", 21); // 主机:192.168.0.104 端口号:21这个192.168.0.104是本机ip地址,本机ip地址如果变动了需要重新按照搭建服务器的过程设定服务器的ip地址
可以在浏览器里输入ftp://192.168.0.104/然后回车看下能否打开
下面是我的服务器的本地物理路径
二、实现FTP下载功能和显示服务器文件信息
#include "dialog.h"#include "ui_dialog.h"#include <QDebug>Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog){ ui->setupUi(this); ftp = new QFtp(this); connect(ftp, SIGNAL(commandFinished(int,bool)),this, SLOT(slotftpCommandFinished(int,bool))); connect(ftp, SIGNAL(listInfo(const QUrlInfo &)),this, SLOT(slotShowList(const QUrlInfo &))); ftp->connectToHost("192.168.0.111", 21); // 主机:192.168.0.111 端口号:21 ftp->login("wang", "123456"); // 用户名:wang 密码:123456}Dialog::~Dialog(){ delete ui;}void Dialog::on_downButton_clicked()//下载{ file = new QFile("d:/main.cpp"); if (!file->open(QIODevice::WriteOnly)) { file->remove(); delete file; file = NULL; } else { ftp->get("main.cpp", file); //下载服务器的main.cpp }}void Dialog::slotftpCommandFinished(int, bool error){ if (ftp->currentCommand() == QFtp::ConnectToHost) { if (error) { } return; } else if (ftp->currentCommand() == QFtp::Login) { } else if (ftp->currentCommand() == QFtp::Get) { if (error) { file->close(); file->remove(); } else { file->close();//核心代码,必不可少 } delete file; } else if (ftp->currentCommand() == QFtp::List) { }}void Dialog::on_listButton_clicked(){ ftp->list();//对于找到的每个目录条目,都会发出 listInfo()信号}void Dialog::slotShowList(const QUrlInfo &urlInfo){ qDebug() << urlInfo.name() << urlInfo.size() << urlInfo.owner() << urlInfo.group() << urlInfo.lastModified().toString("MMM dd yyyy") << urlInfo.isDir();}
注意事项:
1、很多人下载文件失败,是由于file->open()了,但是下载完之后,file没有close,但是由于ftp->get()又是异步的,不能在调用之后立马将file关闭
所以需要 connect(ftp,SIGNAL(commandFinished(int,bool)),this,SLOT(slotftpCommandFinished(int,bool))); 然后在槽函数内的
elseif(ftp->currentCommand()==QFtp::Get)这个分句内将file关闭。
2、ftp->list()调用之后,对于找到的每个文件和目录,都会发出 listInfo()信号
三、QFtp的一些其他功能
在连接并登录服务器之后才能进行下列操作
1、实现文件上传,此时的file不需要打开
file=newQFile("d:/main.cpp");
ftp->put(file,"main.cpp");
2、创建文件夹
ftp->mkdir("new_dir");
3、删除文件/目录
remove() 是删除文件,rmdir() 则是删除目录。
4、切换工作目录
ftp->cd("/doc");//doc是根目录下的文件夹
5、对服务器上的文件进行重命名
ftp->rename("c++","c");// c++ -> c
参照博客:http://blog.csdn.net/liang19890820/article/details/53318906#comments
1 0
- Qt之QFtp
- Qt之QFtp
- Qt中的QFtp类
- Qt---QFtp上传、下载二进制文件
- QFtp
- Qt中利用QThread在线程中同步使用QFtp
- QT QFtp使用实例 从FTP下载一个文件
- 在Qt中如何实现QThread线程同步QFtp
- Qt编程9:QFtp断点续传(普通文件)
- Qt编程10:QFtp断点续传(文件夹以及文件)
- QFtp学习
- Qt中QFtp获取带有中文的文件名称出现乱码的解决方法
- Qt中QFtp获取带有中文的文件名称出现乱码的解决方法
- 最近在写个自动下载数据的软件,发现QT的QFtp不大好用
- Qt中QFtp和QURL获取带有中文的文件名称出现乱码的解决方法
- QFtp 与中文问题
- QFtp 协议下载
- QFtp的使用
- HDU2795 Billboard 线段树
- 我的管理之旅
- 记一次 k8s 集群单点故障引发的血案
- UML之活动图
- Problem A. Country Leader Google APAC 2017 University Test Round A
- Qt之QFtp
- 编译Boostrap V3 Less版本的源码(涉及Nodejs、Less、Grunt)
- 05 重定位和链接脚本
- Android控件架构与自定义控件详解(四)事件拦截机制分析
- JPA与EJB3的关系
- Win7下移动硬盘安装CentOS7-总结
- tensorflow+cuda+linux mint开发环境搭建
- unity shader 之 CG(C for graphics) 入门(1)——CG基本知识
- 【J2SE】——异常理论篇