QFtp Class Reference
[QtNetwork module]
该QFtp类提供FTP协议的客户端的实现。More…
继承QObject。
Types
enum Command { None_, SetTransferMode, SetProxy, ConnectToHost, ..., RawCommand }
enum Error { NoError, UnknownError, HostNotFound, ConnectionRefused, NotConnected }
enum State { Unconnected, HostLookup, Connecting, Connected, LoggedIn, Closing }
enum TransferMode { Active, Passive }
enum TransferType { Binary, Ascii }
Methods
__init__ (self, QObject parent = None)
abort (self)
int bytesAvailable (self)
int cd (self, QString directory)
clearPendingCommands (self)
int close (self)
int connectToHost (self, QString host, int port = 21)
Command currentCommand (self)
QIODevice currentDevice (self)
int currentId (self)
Error error (self)
QString errorString (self)
int get (self, QString file, QIODevice device = None, TransferType type = QFtp.Binary)
bool hasPendingCommands (self)
int list (self, QString directory = QString())
int login (self, QString user = QString(), QString password = QString())
int mkdir (self, QString dir)
int put (self, QByteArray data, QString file, TransferType type = QFtp.Binary)
int put (self, QIODevice device, QString file, TransferType type = QFtp.Binary)
int rawCommand (self, QString command)
str read (self, int maxlen)
QByteArray readAll (self)
int remove (self, QString file)
int rename (self, QString oldname, QString newname)
int rmdir (self, QString dir)
int setProxy (self, QString host, int port)
int setTransferMode (self, TransferMode mode)
State state (self)
Qt Signals
void commandFinished (int,bool)
void commandStarted (int)
void dataTransferProgress (qint64,qint64)
void done (bool)
void listInfo (const QUrlInfo&)
void rawCommandReply (int,const QString&)
void readyRead ()
void stateChanged (int)
Detailed Description
该QFtp类提供FTP协议的客户端的实现。
这个类提供了一个直接接口到FTP ,让您拥有更多的控制权的要求。然而,对于新的应用程序,它是推荐使用QNetworkAccessManager和QNetworkReply作为这些类具有一个简单,但更强大的API 。
类以异步方式工作,所以没有阻挡功能。如果操作不能被立即执行,该函数将仍然返回直线距离,操作将被安排在以后执行。调度操作的结果通过信号报告。这种方法依赖于事件循环运行之中。
可以计划的操作(它们在文档其馀部分被称为“命令” )有以下几种:connectToHost( )login( )close( )list( )cd( )get( )put( )remove( )mkdir( )rmdir( )rename()和rawCommand( ) 。
所有这些命令都返回一个唯一的标识符,它允许你跟踪当前正在执行的命令。当一个指令的执行开始时,commandStarted( )信号与命令的识别码被发射。当命令完成后,commandFinished( )信号发出的命令的标识符和一个布尔值,表示该命令是否有错误完成。
在某些情况下,您可能要执行的命令序列,例如:如果你想连接并登录到FTP服务器。这是简单的实现:
QFtp *ftp = new QFtp(parent);
ftp->connectToHost("ftp.qt.nokia.com");
ftp->login();
在这种情况下,两个FTP命令已排定。当最后一个调度命令已完成,一done( )信号被发射一个布尔参数,它告诉你的序列是否有错误完成。
如果其中一个命令在命令序列的执行过程中发生了错误,所有挂起的命令(即预定的,但尚未执行的命令)被清零,并且没有信号发射它们。
一些命令,例如list( ) ,发出额外的信号来报告他们的成果。
例如:如果你想从Qt的FTP服务器上下载安装文件,你会这样写:
ftp->connectToHost("ftp.qt.nokia.com"); // id == 1
ftp->login(); // id == 2
ftp->cd("qt"); // id == 3
ftp->get("INSTALL"); // id == 4
ftp->close(); // id == 5
在这个例子中的信号按以下顺序发出(以小的变化,这取决于网络的流量等) :
start(1)
stateChanged(HostLookup)
stateChanged(Connecting)
stateChanged(Connected)
finished(1, false)
start(2)
stateChanged(LoggedIn)
finished(2, false)
start(3)
finished(3, false)
start(4)
dataTransferProgress(0, 3798)
dataTransferProgress(2896, 3798)
readyRead()
dataTransferProgress(3798, 3798)
readyRead()
finished(4, false)
start(5)
stateChanged(Closing)
stateChanged(Unconnected)
finished(5, false)
done(false)
该dataTransferProgress如果要显示在上面的例子()信号是有用的一progress bar以通知用户有关下载的进度。该readyRead( )信号告诉你,有数据准备好读。可被查询的数据量,然后与bytesAvailable()函数,它可以读取与该read()或readAll()函数。
如果登录失败对于上面的例子中,信号是这样的:
start(1)
stateChanged(HostLookup)
stateChanged(Connecting)
stateChanged(Connected)
finished(1, false)
start(2)
finished(2, true)
done(true)
然后,您可以获取与错误的详细信息error()和errorString()函数。
对于文件传输, QFtp可以同时使用主动或被动模式,并使用被动传输文件的默认模式,见文档setTransferMode( ) ,以便了解更多的细节。
Call setProxy( )使QFtp通过FTP代理服务器进行连接。
该功能currentId()和currentCommand( )提供有关当前正在执行的命令的详细信息。
该功能hasPendingCommands()和clearPendingCommands()允许您查询和清除挂起的命令的列表。
如果你是一个有经验的网络程序员,并希望有完全的控制,您可以使用rawCommand()来执行任意FTP命令。
Warning:QFtp的当前版本不完全支持非Unix的FTP服务器。
Type Documentation
QFtp.Command
该枚举被用作返回值currentCommand()函数。这可以让你执行特定命令的具体行动,例如:在FTP客户端,你可能想清除的目录视图时,list如果在这种情况下,你可以简单地检查连接到启动的插槽( )信号, ( )命令启动currentCommand()是List
。
Constant | Value | Description |
---|---|---|
QFtp.None |
0 |
正在执行任何命令。 |
QFtp.SetTransferMode |
1 |
设置transfer模式。 |
QFtp.SetProxy |
2 |
打开或关闭代理。 |
QFtp.ConnectToHost |
3 |
connectToHost()被执行。 |
QFtp.Login |
4 |
login()被执行。 |
QFtp.Close |
5 |
close()被执行。 |
QFtp.List |
6 |
list()被执行。 |
QFtp.Cd |
7 |
cd()被执行。 |
QFtp.Get |
8 |
get()被执行。 |
QFtp.Put |
9 |
put()被执行。 |
QFtp.Remove |
10 |
remove()被执行。 |
QFtp.Mkdir |
11 |
mkdir()被执行。 |
QFtp.Rmdir |
12 |
rmdir()被执行。 |
QFtp.Rename |
13 |
rename()被执行。 |
QFtp.RawCommand |
14 |
rawCommand()被执行。 |
See also currentCommand( ) 。
QFtp.Error
这个枚举标识所发生的错误。
Constant | Value | Description |
---|---|---|
QFtp.NoError |
0 |
未发生错误。 |
QFtp.HostNotFound |
2 |
该主机名查找失败。 |
QFtp.ConnectionRefused |
3 |
服务器拒绝连接。 |
QFtp.NotConnected |
4 |
试图发送一个命令,但有一个服务器的任何连接。 |
QFtp.UnknownError |
1 |
发生错误比上述指定的。 |
See also error( ) 。
QFtp.State
这个枚举变量定义的连接状态:
Constant | Value | Description |
---|---|---|
QFtp.Unconnected |
0 |
还有就是主机的连接。 |
QFtp.HostLookup |
1 |
主机名查找正在进行中。 |
QFtp.Connecting |
2 |
连接到主机的尝试正在进行中。 |
QFtp.Connected |
3 |
到主机的连接已经完成。 |
QFtp.LoggedIn |
4 |
连接和用户登录已经实现。 |
QFtp.Closing |
5 |
连接被关闭了,但它尚未关闭。 (该状态将是Unconnected 当连接关闭。 ) |
See also stateChanged()和state( ) 。
QFtp.TransferMode
FTP使用两种套接字连接,一个用于命令和另一个用于传输数据。而总是由客户端发起命令连接,第二连接可以通过在客户端或服务器来启动。
这个枚举定义了客户端(被动模式)或服务器(主动模式)是否应该建立数据连接。
Constant | Value | Description |
---|---|---|
QFtp.Passive |
1 |
客户端连接到服务器传送数据。 |
QFtp.Active |
0 |
该服务器连接到客户端发送其数据。 |
QFtp.TransferType
这个枚举标识与get和put命令中使用的数据传输类型。
Constant | Value | Description |
---|---|---|
QFtp.Binary |
0 |
这些数据将被传输二进制模式。 |
QFtp.Ascii |
1 |
这些数据将被转移在ASCII模式和新行字符将被转换为本地格式。 |
Method Documentation
QFtp.__init__ (self, QObject parent = None)
该parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。
构造一个QFtp与给定对象parent。
QFtp.abort (self)
这种方法也是一个Qt槽与C + +的签名void abort()
。
中止当前命令,并删除所有已计划的命令。
如果有一个未完成的命令(即命令的量,commandStarted()信号已被发射,但是该commandFinished()信号没有被发射的) ,该函数发送一个ABORT
命令给服务器。当服务器回复该命令被中止,commandFinished()的信号与error
参数设置为true
发出该命令。由于定时问题,有可能在命令已经完成之前中止请求到达服务器,在这种情况下,该commandFinished()信号被发射的error
参数设置为false
。
对于那些受中止( )其他所有的命令,没有信号发射。
如果你不开始进一步直接中止后FTP命令( ) ,将不会有任何计划的命令和done()信号被发射。
Warning:有些FTP服务器,例如BSD的FTP守护程序( 0.3版本) ,返回错误已经发生中止,即使一个肯定的答复。对于这些服务器的commandFinished( )信号有错误标志设置为false
,即使命令没有成功完成。
See also clearPendingCommands( ) 。
int QFtp.bytesAvailable (self)
返回可从数据套接字中读取的时刻的字节数。
See also get( )readyRead( )read()和readAll( ) 。
int QFtp.cd (self, QString directory)
改变了服务器的工作目录dir。
该功能不会阻止,并立即返回。该命令是预定的,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过commandStarted()和commandFinished( ) 。
当命令开始commandStarted()信号被发射。当它完成时的commandFinished()信号被发射。
See also commandStarted()和commandFinished( ) 。
QFtp.clearPendingCommands (self)
删除所有挂起的命令从预定的命令列表。这并不会影响正在执行的命令。如果你想停止这一点,使用abort( ) 。
See also hasPendingCommands()和abort( ) 。
int QFtp.close (self)
关闭连接到FTP服务器。
该stateChanged()信号被发射时,在连接过程的状态变化,例如至Closing
,然后Unconnected
。
该功能不会阻止,并立即返回。该命令是预定的,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过commandStarted()和commandFinished( ) 。
当命令开始commandStarted()信号被发射。当它完成时的commandFinished()信号被发射。
See also stateChanged( )commandStarted()和commandFinished( ) 。
int QFtp.connectToHost (self, QString host, int port = 21)
连接到FTP服务器host使用端口port。
该stateChanged()信号被发射时,在连接过程的状态变化,例如至HostLookup
,然后Connecting
,然后Connected
。
该功能不会阻止,并立即返回。该命令是预定的,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过commandStarted()和commandFinished( ) 。
当命令开始commandStarted()信号被发射。当它完成时的commandFinished()信号被发射。
See also stateChanged( )commandStarted()和commandFinished( ) 。
Command QFtp.currentCommand (self)
[
返回FTP命令被执行的命令类型或None
如果没有命令被执行。
]($docs-qftp.html#Command-enum)
QIODevice QFtp.currentDevice (self)
返回QIODevice指针所使用的FTP命令来读取数据或存储数据。如果有正在执行无电流的FTP命令,或者如果命令不使用的IO设备,该函数返回0 。
此功能可用于删除的QIODevice在连接到插槽commandFinished()信号。
int QFtp.currentId (self)
返回正在执行FTP命令或标识符0 ,如果没有命令被执行。
See also currentCommand( ) 。
Error QFtp.error (self)
返回所发生的最后一个错误。接收时,此功能非常有用,找出什么地方出了错一commandFinished()或一done()的信号与error
参数设置为true
。
如果你开始一个新的命令,错误状态重置为NoError
。
QString QFtp.errorString (self)
返回上次发生错误的人类可读的描述。接收时,这是用于呈现错误信息给用户有用的一commandFinished()或一done()的信号与error
参数设置为true
。
错误字符串通常是(但不总是)从服务器的应答,因此它并不总是可能的翻译的字符串。如果消息来自Qt中,字符串已通过tr( ) 。
int QFtp.get (self, QString file, QIODevice device = None, TransferType type = QFtp.Binary)
下载文件file从服务器。
If dev是0,则readyRead当有数据可供读取( )信号被发射。然后,您可以与读取数据read()或readAll()函数。
If dev不为0时,数据被直接写入设备dev。确保dev指针是有效的操作的持续时间(它是安全的删除当commandFinished()信号被发射) 。在这种情况下readyRead()信号是not发出的,你不能与读取数据read()或readAll()函数。
如果不立即读取数据变得可用,即当readyRead()信号被发射,它仍然是可用的,直到下一个指令开始。
例如,如果你想尽快有一些可用的数据呈现给用户,连接到readyRead()信号,并立即读出的数据。在另一方面,如果只想用完整的数据来工作,你可以连接到commandFinished( )信号和读取时的get ( )命令完成的数据。
这取决于价值的数据作为二进制或ASCIItype。
该功能不会阻止,并立即返回。该命令是预定的,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过commandStarted()和commandFinished( ) 。
当命令开始commandStarted()信号被发射。当它完成时的commandFinished()信号被发射。
See also readyRead( )dataTransferProgress()和commandStarted( ) 。
bool QFtp.hasPendingCommands (self)
返回True如果有尚未被执行计划的任何命令,否则返回False 。
正在执行的命令是not视为一个调度命令。
See also clearPendingCommands( )currentId()和currentCommand( ) 。
int QFtp.list (self, QString directory = QString())
列出目录的内容dir在FTP服务器上。如果dir是空的,它会列出当前目录的内容。
该listInfo( )信号被发射对找到的每个目录项。
该功能不会阻止,并立即返回。该命令是预定的,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过commandStarted()和commandFinished( ) 。
当命令开始commandStarted()信号被发射。当它完成时的commandFinished()信号被发射。
See also listInfo( )commandStarted()和commandFinished( ) 。
int QFtp.login (self, QString user = QString(), QString password = QString())
登录到FTP服务器的用户名user和密码password。
该stateChanged()信号被发射时,在连接过程的状态变化,例如至LoggedIn
。
该功能不会阻止,并立即返回。该命令是预定的,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过commandStarted()和commandFinished( ) 。
当命令开始commandStarted()信号被发射。当它完成时的commandFinished()信号被发射。
See also commandStarted()和commandFinished( ) 。
int QFtp.mkdir (self, QString dir)
创建一个名为目录dir在服务器上。
该功能不会阻止,并立即返回。该命令是预定的,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过commandStarted()和commandFinished( ) 。
当命令开始commandStarted()信号被发射。当它完成时的commandFinished()信号被发射。
See also commandStarted()和commandFinished( ) 。
int QFtp.put (self, QByteArray data, QString file, TransferType type = QFtp.Binary)
读取IO设备中的数据dev,并将其写入到被调用的文件file在服务器上。读取数据从IO设备的块,所以此重载允许您传输大量的数据,而不需要读取所有的数据到内存中一次。
这取决于价值的数据作为二进制或ASCIItype。
确保dev指针是有效的操作的持续时间(它是安全的删除当commandFinished()被发射) 。
int QFtp.put (self, QIODevice device, QString file, TransferType type = QFtp.Binary)
这是一个重载函数。
写入给定的一个副本data要调用的文件file在服务器上。上传的进度报告的dataTransferProgress()信号。
这取决于价值的数据作为二进制或ASCIItype。
该功能不会阻止,并立即返回。该命令是预定的,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过commandStarted()和commandFinished( ) 。
当命令开始commandStarted()信号被发射。当它完成时的commandFinished()信号被发射。
由于该功能需要的副本data,你可以放弃自己的副本时,该函数返回。
See also dataTransferProgress( )commandStarted()和commandFinished( ) 。
int QFtp.rawCommand (self, QString command)
将原始的FTP命令command到FTP服务器。这是低层次的FTP访问有用的。如果你想执行的操作具有等效QFtp的功能,我们建议使用该功能,而不是原始的FTP命令,因为功能更容易,更安全。
该功能不会阻止,并立即返回。该命令是预定的,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过commandStarted()和commandFinished( ) 。
当命令开始commandStarted()信号被发射。当它完成时的commandFinished()信号被发射。
See also rawCommandReply( )commandStarted()和commandFinished( ) 。
str QFtp.read (self, int maxlen)
阅读maxlen从数据插座成字节data并返回读取的字节数。返回-1,如果发生了错误。
See also get( )readyRead( )bytesAvailable()和readAll( ) 。
QByteArray QFtp.readAll (self)
[
读取所有可用的数据套接字的字节数,并返回它们。
]($docs-qbytearray.html)
See also get( )readyRead( )bytesAvailable()和read( ) 。
int QFtp.remove (self, QString file)
删除的文件称为file从服务器。
该功能不会阻止,并立即返回。该命令是预定的,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过commandStarted()和commandFinished( ) 。
当命令开始commandStarted()信号被发射。当它完成时的commandFinished()信号被发射。
See also commandStarted()和commandFinished( ) 。
int QFtp.rename (self, QString oldname, QString newname)
所谓重命名文件oldname至newname在服务器上。
该功能不会阻止,并立即返回。该命令是预定的,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过commandStarted()和commandFinished( ) 。
当命令开始commandStarted()信号被发射。当它完成时的commandFinished()信号被发射。
See also commandStarted()和commandFinished( ) 。
int QFtp.rmdir (self, QString dir)
所谓删除的目录dir从服务器。
该功能不会阻止,并立即返回。该命令是预定的,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过commandStarted()和commandFinished( ) 。
当命令开始commandStarted()信号被发射。当它完成时的commandFinished()信号被发射。
See also commandStarted()和commandFinished( ) 。
int QFtp.setProxy (self, QString host, int port)
允许主机使用FTP代理的host和端口port。调用此函数host空禁用代理。
QFtp不支持FTP环比HTTP代理服务器。使用QNetworkAccessManager这一点。
int QFtp.setTransferMode (self, TransferMode mode)
设置当前FTP传输模式mode。默认值是QFtp.Passive。
See also QFtp.TransferMode。
State QFtp.state (self)
返回该对象的当前状态。当状态改变时,stateChanged()信号被发射。
See also State和stateChanged( ) 。
Qt Signal Documentation
void commandFinished (int,bool)
这是该信号的默认超载。
处理确定的命令时,这个信号被发射id已完成。error是真的,如果在处理过程中发生错误,否则error是假的。
See also commandStarted( )done( )error()和errorString( ) 。
void commandStarted (int)
这是该信号的默认超载。
处理确定的命令时,这个信号被发射id开始。
See also commandFinished()和done( ) 。
void dataTransferProgress (qint64,qint64)
这是该信号的默认超载。
此信号响应于被发射get()或put()请求指示下载或上传的当前进度。
done是数据的一个已经被转移及金额total是数据要被读出或写入的总量。它是可能的QFtp类是不能够确定数据应该被转移的总量,在此情况total为0。 (如果这个信号连接到QProgressBar,进度条显示一个繁忙的指标,如果总为0 ) 。
Warning: done和total不一定以字节为单位的大小,因为对于大文件的这些值可能需要被“缩放”,以避免溢出。
See also get( )put()和QProgressBar。
void done (bool)
这是该信号的默认超载。
这个信号被发射时的最后等候命令完成(这是后发出的最后一个命令的commandFinished( )信号) 。error是真的,如果在处理过程中发生错误,否则error是假的。
See also commandFinished( )error()和errorString( ) 。
void listInfo (const QUrlInfo&)
这是该信号的默认超载。
这个信号被发射的每个目录项的list( )命令的发现。条目的详细信息存储在i。
See also list( ) 。
void rawCommandReply (int,const QString&)
这是该信号的默认超载。
此信号响应于所述发射rawCommand()函数。replyCode是3位数字应答码和detail是遵循应答码的文本。
See also rawCommand( ) 。
void readyRead ()
这是该信号的默认超载。
此信号响应于被发射get( )命令时有新的数据读取。
如果指定的设备如在第二个参数get()命令,该信号是not射出,而是将数据直接写入到设备。
如果你想,只要它成为可用在处理大块数据这个信号是非常有用的。如果你只关心在完整的数据,只需连接到commandFinished( )信号并读取数据,然后代替。
See also get( )read( )readAll()和bytesAvailable( ) 。
void stateChanged (int)
这是该信号的默认超载。
这个信号被发射时的连接状态发生改变。这个论点state是该连接的新的状态,它是一个State值。
它通常是在响应于发射connectToHost()或close()命令,但它也可以被发射的“自发地” ,例如当服务器意外关闭连接。
See also connectToHost( )close( )state()和State。