QFtp学习
来源:互联网 发布:网络正常,优酷打不开 编辑:程序博客网 时间:2024/06/11 18:50
现在通过C++ GUI Programming with Qt4书中QFtp的例子, 来回顾一下以前学习的知识。
先回顾下书中的分析,添加一些自己不熟悉的知识点,最后了列出完整程序代码。
1. The QUrl class provides a high-level interface for extracting the different parts of a URL, such as the file name, path, protocol, and port.
QUrl类提供了一个高级接口,用来提取URL的不同部分,如文件名称、路径、协议和端口。
1.1 bool QUrl::isValid () const // Returns true if the URL is valid; otherwise returns false.
1.2 QString QUrl::path () const // Returns the path of the URL.
path().isEmpty() // QString.isEmpty(); 检查字符串是否为空
1.3 QString QUrl::scheme () const // Returns the scheme of the URL. If an empty string is returned, this means the scheme is undefined and the URL is then relative.
See also setScheme() and isRelative().
2. QFileInfo class //想起刚开始学习网络编程的时候对文件处理还不熟悉,饶弯子了
The QFileInfo class provides system-independent file information.
QFileInfo provides information about a file's name and position (path) in the file system, its access rights and whether it is a directory or symbolic link, QFileInfo can also be used to obtain information about a Qt resource.
2.1 5种构造函数,此处为QFileInfo::QFileInfo ( const QDir & dir, const QString & file )。
2.2 QString QFileInfo::fileName () const
Returns the name of the file, excluding the path.
Example:
QFileInfo fi("/tmp/archive.tar.gz");
QString name = fi.fileName(); // name = "archive.tar.gz"
3 QFtp class
The QFtp class provides an implementation of the client side of FTP protocol.
This class provides a direct interface to FTP that allows you to have more control over the requests. However, for new applications, it is recommended to use QNetworkAccessManager and QNetworkReply, as those classes possess a simpler, yet more powerful API.
这里有个奇怪的问题,文档中怎么说对于新的应用程序建议使用QNetworkAccessManager and QNetworkReply。
QFtp provides several FTP commands, including connectToHost(), login(), close(), list(), cd(), get(), put(), remove(), mkdir(), rmdir(), and rename(). All of these functions schedule an FTP command and return an ID number that identifies the command. It is also possible to control the transfer mode (the default is passive) and the transfer type (the default is binary).
未完
ftpget.pro 文件
TEMPLATE = appQT = core networkCONFIG += consoleCONFIG -= app_bundleHEADERS = ftpget.hSOURCES = ftpget.cpp \ main.cpp
ftpget.h 头文件
#ifndef FTPGET_H#define FTPGET_H#include <QFile>#include <QFtp>class QUrl;class FtpGet : public QObject{ Q_OBJECTpublic: FtpGet(QObject *parent = 0); bool getFile(const QUrl &url);signals: void done();private slots: void ftpDone(bool error);private: QFtp ftp; QFile file;};#endif
ftpget.cpp 文件
#include <QtCore>#include <QtNetwork>#include <iostream>#include "ftpget.h"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 (url.scheme() != "ftp") { std::cerr << "Error: URL must start with 'ftp:'" << std::endl; return false; } if (url.path().isEmpty()) { std::cerr << "Error: URL has 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: Cannot write file " << qPrintable(file.fileName()) << ": " << qPrintable(file.errorString()) << std::endl; return false; } ftp.connectToHost(url.host(), url.port(21)); 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();}
main.cpp 文件
#include <QtCore>#include <iostream>#include "ftpget.h"int main(int argc, char *argv[]){ QCoreApplication app(argc, argv); QStringList args = QCoreApplication::arguments(); if (args.count() != 2) { std::cerr << "Usage: ftpget url" << std::endl << "Example:" << std::endl << " ftpget ftp://ftp.trolltech.com/mirrors" << std::endl; return 1; } FtpGet getter; if (!getter.getFile(QUrl(args[1]))) return 1; QObject::connect(&getter, SIGNAL(done()), &app, SLOT(quit())); return app.exec();}
- QFtp学习
- QFtp
- Qt中的QFtp类
- QFtp 与中文问题
- QFtp 协议下载
- QFtp的使用
- Qt5加载QFtp
- Qt5编译使用QFtp
- Qt之QFtp
- 用Qt5编译QFtp
- Qt之QFtp
- QT5.X 编译QFtp全过程
- QFtp中文乱码的问题
- Qt---QFtp上传、下载二进制文件
- 基于QFtp的ftp客户端
- QT5.X 编译QFtp全过程
- 使用qftp或者qhttp下载文件
- QT5中如何使用QFtp类
- ifconfig命令
- 打开pngsuite中的basn6a16.png的问题
- 转载:陈浩博客
- Java Socket编程 文件传输(客户端从服务器下载一个文件)
- 其实真的很迷茫
- QFtp学习
- 用C#做波形图特效,简洁地说就是做波浪线
- POJ 1008 Maya Calendar
- memcpy memset strcpy
- 史上最全的vSphere命令—用命令来操作vSpherer
- 如何得到Oracle数据库中的所有表空间?
- useradd 无法打开密码文件
- javascript学习笔记(5)
- ping程序实现