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 ,让您拥有更多的控制权的要求。然而,对于新的应用程序,它是推荐使用QNetworkAccessManagerQNetworkReply作为这些类具有一个简单,但更强大的API 。

类以异步方式工作,所以没有阻挡功能。如果操作不能被立即执行,该函数将仍然返回直线距离,操作将被安排在以后执行。调度操作的结果通过信号报告。这种方法依赖于事件循环运行之中。

可以计划的操作(它们在文档其馀部分被称为“命令” )有以下几种:connectToHost( )login( )close( )list( )cd( )get( )put( )remove( )mkdir( )rmdir( )rename()和rawCommand( ) 。

所有这些命令都返回一个唯一的标识符,它允许你跟踪当前正在执行的命令。当一个指令的执行开始时,commandStarted( )信号与命令的识别码被发射。当命令完成后,commandFinished( )信号发出的命令的标识符和一个布尔值,表示该命令是否有错误完成。

在某些情况下,您可能要执行的命令序列,例如:如果你想连接并登录到FTP服务器。这是简单的实现:

  1. QFtp *ftp = new QFtp(parent);
  2. ftp->connectToHost("ftp.qt.nokia.com");
  3. ftp->login();

在这种情况下,两个FTP命令已排定。当最后一个调度命令已完成,一done( )信号被发射一个布尔参数,它告诉你的序列是否有错误完成。

如果其中一个命令在命令序列的执行过程中发生了错误,所有挂起的命令(即预定的,但尚未执行的命令)被清零,并且没有信号发射它们。

一些命令,例如list( ) ,发出额外的信号来报告他们的成果。

例如:如果你想从Qt的FTP服务器上下载安装文件,你会这样写:

  1. ftp->connectToHost("ftp.qt.nokia.com"); // id == 1
  2. ftp->login(); // id == 2
  3. ftp->cd("qt"); // id == 3
  4. ftp->get("INSTALL"); // id == 4
  5. ftp->close(); // id == 5

在这个例子中的信号按以下顺序发出(以小的变化,这取决于网络的流量等) :

  1. start(1)
  2. stateChanged(HostLookup)
  3. stateChanged(Connecting)
  4. stateChanged(Connected)
  5. finished(1, false)
  6. start(2)
  7. stateChanged(LoggedIn)
  8. finished(2, false)
  9. start(3)
  10. finished(3, false)
  11. start(4)
  12. dataTransferProgress(0, 3798)
  13. dataTransferProgress(2896, 3798)
  14. readyRead()
  15. dataTransferProgress(3798, 3798)
  16. readyRead()
  17. finished(4, false)
  18. start(5)
  19. stateChanged(Closing)
  20. stateChanged(Unconnected)
  21. finished(5, false)
  22. done(false)

dataTransferProgress如果要显示在上面的例子()信号是有用的一progress bar以通知用户有关下载的进度。该readyRead( )信号告诉你,有数据准备好读。可被查询的数据量,然后与bytesAvailable()函数,它可以读取与该read()或readAll()函数。

如果登录失败对于上面的例子中,信号是这样的:

  1. start(1)
  2. stateChanged(HostLookup)
  3. stateChanged(Connecting)
  4. stateChanged(Connected)
  5. finished(1, false)
  6. start(2)
  7. finished(2, true)
  8. done(true)

然后,您可以获取与错误的详细信息error()和errorString()函数。

对于文件传输, QFtp可以同时使用主动或被动模式,并使用被动传输文件的默认模式,见文档setTransferMode( ) ,以便了解更多的细节。

Call setProxy( )使QFtp通过FTP代理服务器进行连接。

该功能currentId()和currentCommand( )提供有关当前正在执行的命令的详细信息。

该功能hasPendingCommands()和clearPendingCommands()允许您查询和清除挂起的命令的列表。

如果你是一个有经验的网络程序员,并希望有完全的控制,您可以使用rawCommand()来执行任意FTP命令。

Warning:QFtp的当前版本不完全支持非Unix的FTP服务器。


Type Documentation

  1. 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( ) 。

  1. QFtp.Error

这个枚举标识所发生的错误。

Constant Value Description
QFtp.NoError 0 未发生错误。
QFtp.HostNotFound 2 该主机名查找失败。
QFtp.ConnectionRefused 3 服务器拒绝连接。
QFtp.NotConnected 4 试图发送一个命令,但有一个服务器的任何连接。
QFtp.UnknownError 1 发生错误比上述指定的。

See also error( ) 。

  1. 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( ) 。

  1. QFtp.TransferMode

FTP使用两种套接字连接,一个用于命令和另一个用于传输数据。而总是由客户端发起命令连接,第二连接可以通过在客户端或服务器来启动。

这个枚举定义了客户端(被动模式)或服务器(主动模式)是否应该建立数据连接。

Constant Value Description
QFtp.Passive 1 客户端连接到服务器传送数据。
QFtp.Active 0 该服务器连接到客户端发送其数据。
  1. QFtp.TransferType

这个枚举标识与get和put命令中使用的数据传输类型。

Constant Value Description
QFtp.Binary 0 这些数据将被传输二进制模式。
QFtp.Ascii 1 这些数据将被转移在ASCII模式和新行字符将被转换为本地格式。

Method Documentation

  1. QFtp.__init__ (self, QObject parent = None)

parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。

构造一个QFtp与给定对象parent

  1. 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( ) 。

  1. int QFtp.bytesAvailable (self)

返回可从数据套接字中读取的时刻的字节数。

See also get( )readyRead( )read()和readAll( ) 。

  1. int QFtp.cd (self, QString directory)

改变了服务器的工作目录dir

该功能不会阻止,并立即返回。该命令是预定的,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过commandStarted()和commandFinished( ) 。

当命令开始commandStarted()信号被发射。当它完成时的commandFinished()信号被发射。

See also commandStarted()和commandFinished( ) 。

  1. QFtp.clearPendingCommands (self)

删除所有挂起的命令从预定的命令列表。这并不会影响正在执行的命令。如果你想停止这一点,使用abort( ) 。

See also hasPendingCommands()和abort( ) 。

  1. int QFtp.close (self)

关闭连接到FTP服务器。

stateChanged()信号被发射时,在连接过程的状态变化,例如至Closing,然后Unconnected

该功能不会阻止,并立即返回。该命令是预定的,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过commandStarted()和commandFinished( ) 。

当命令开始commandStarted()信号被发射。当它完成时的commandFinished()信号被发射。

See also stateChanged( )commandStarted()和commandFinished( ) 。

  1. 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( ) 。

  1. Command QFtp.currentCommand (self)

[

返回FTP命令被执行的命令类型或None如果没有命令被执行。

]($docs-qftp.html#Command-enum)

See also currentId( ) 。

  1. QIODevice QFtp.currentDevice (self)

返回QIODevice指针所使用的FTP命令来读取数据或存储数据。如果有正在执行无电流的FTP命令,或者如果命令不使用的IO设备,该函数返回0 。

此功能可用于删除的QIODevice在连接到插槽commandFinished()信号。

See also get()和put( ) 。

  1. int QFtp.currentId (self)

返回正在执行FTP命令或标识符0 ,如果没有命令被执行。

See also currentCommand( ) 。

  1. Error QFtp.error (self)

返回所发生的最后一个错误。接收时,此功能非常有用,找出什么地方出了错一commandFinished()或一done()的信号与error参数设置为true

如果你开始一个新的命令,错误状态重置为NoError

  1. QString QFtp.errorString (self)

返回上次发生错误的人类可读的描述。接收时,这是用于呈现错误信息给用户有用的一commandFinished()或一done()的信号与error参数设置为true

错误字符串通常是(但不总是)​​从服务器的应答,因此它并不总是可能的翻译的字符串。如果消息来自Qt中,字符串已通过tr( ) 。

  1. 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()信号被发射。

commandFinished( )

See also readyRead( )dataTransferProgress()和commandStarted( ) 。

  1. bool QFtp.hasPendingCommands (self)

返回True如果有尚未被执行计划的任何命令,否则返回False 。

正在执行的命令是not视为一个调度命令。

See also clearPendingCommands( )currentId()和currentCommand( ) 。

  1. int QFtp.list (self, QString directory = QString())

列出目录的内容dir在FTP服务器上。如果dir是空的,它会列出当前目录的内容。

listInfo( )信号被发射对找到的每个目录项。

该功能不会阻止,并立即返回。该命令是预定的,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过commandStarted()和commandFinished( ) 。

当命令开始commandStarted()信号被发射。当它完成时的commandFinished()信号被发射。

See also listInfo( )commandStarted()和commandFinished( ) 。

  1. int QFtp.login (self, QString user = QString(), QString password = QString())

登录到FTP服务器的用户名user和密码password

stateChanged()信号被发射时,在连接过程的状态变化,例如至LoggedIn

该功能不会阻止,并立即返回。该命令是预定的,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过commandStarted()和commandFinished( ) 。

当命令开始commandStarted()信号被发射。当它完成时的commandFinished()信号被发射。

See also commandStarted()和commandFinished( ) 。

  1. int QFtp.mkdir (self, QString dir)

创建一个名为目录dir在服务器上。

该功能不会阻止,并立即返回。该命令是预定的,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过commandStarted()和commandFinished( ) 。

当命令开始commandStarted()信号被发射。当它完成时的commandFinished()信号被发射。

See also commandStarted()和commandFinished( ) 。

  1. int QFtp.put (self, QByteArray data, QString file, TransferType type = QFtp.Binary)

读取IO设备中的数据dev,并将其写入到被调用的文件file在服务器上。读取数据从IO设备的块,所以此重载允许您传输大量的数据,而不需要读取所有的数据到内存中一次。

这取决于价值的数据作为二进制或ASCIItype

确保dev指针是有效的操作的持续时间(它是安全的删除当commandFinished()被发射) 。

  1. 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( ) 。

  1. int QFtp.rawCommand (self, QString command)

将原始的FTP命令command到FTP服务器。这是低层次的FTP访问有用的。如果你想执行的操作具有等效QFtp的功能,我们建议使用该功能,而不是原始的FTP命令,因为功能更容易,更安全。

该功能不会阻止,并立即返回。该命令是预定的,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过commandStarted()和commandFinished( ) 。

当命令开始commandStarted()信号被发射。当它完成时的commandFinished()信号被发射。

See also rawCommandReply( )commandStarted()和commandFinished( ) 。

  1. str QFtp.read (self, int maxlen)

阅读maxlen从数据插座成字节data并返回读取的字节数。返回-1,如果发生了错误。

See also get( )readyRead( )bytesAvailable()和readAll( ) 。

  1. QByteArray QFtp.readAll (self)

[

读取所有可用的数据套接字的字节数,并返回它们。

]($docs-qbytearray.html)

See also get( )readyRead( )bytesAvailable()和read( ) 。

  1. int QFtp.remove (self, QString file)

删除的文件称为file从服务器。

该功能不会阻止,并立即返回。该命令是预定的,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过commandStarted()和commandFinished( ) 。

当命令开始commandStarted()信号被发射。当它完成时的commandFinished()信号被发射。

See also commandStarted()和commandFinished( ) 。

  1. int QFtp.rename (self, QString oldname, QString newname)

所谓重命名文件oldnamenewname在服务器上。

该功能不会阻止,并立即返回。该命令是预定的,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过commandStarted()和commandFinished( ) 。

当命令开始commandStarted()信号被发射。当它完成时的commandFinished()信号被发射。

See also commandStarted()和commandFinished( ) 。

  1. int QFtp.rmdir (self, QString dir)

所谓删除的目录dir从服务器。

该功能不会阻止,并立即返回。该命令是预定的,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过commandStarted()和commandFinished( ) 。

当命令开始commandStarted()信号被发射。当它完成时的commandFinished()信号被发射。

See also commandStarted()和commandFinished( ) 。

  1. int QFtp.setProxy (self, QString host, int port)

允许主机使用FTP代理的host和端口port。调用此函数host空禁用代理。

QFtp不支持FTP环比HTTP代理服务器。使用QNetworkAccessManager这一点。

  1. int QFtp.setTransferMode (self, TransferMode mode)

设置当前FTP传输模式mode。默认值是QFtp.Passive

See also QFtp.TransferMode

  1. State QFtp.state (self)

返回该对象的当前状态。当状态改变时,stateChanged()信号被发射。

See also StatestateChanged( ) 。


Qt Signal Documentation

  1. void commandFinished (int,bool)

这是该信号的默认超载。

处理确定的命令时,这个信号被发射id已完成。error是真的,如果在处理过程中发生错误,否则error是假的。

See also commandStarted( )done( )error()和errorString( ) 。

  1. void commandStarted (int)

这是该信号的默认超载。

处理确定的命令时,这个信号被发射id开始。

See also commandFinished()和done( ) 。

  1. void dataTransferProgress (qint64,qint64)

这是该信号的默认超载。

此信号响应于被发射get()或put()请求指示下载或上传的当前进度。

done是数据的一个已经被转移及金额total是数据要被读出或写入的总量。它是可能的QFtp类是不能够确定数据应该被转移的总量,在此情况total为0。 (如果这个信号连接到QProgressBar,进度条显示一个繁忙的指标,如果总为0 ) 。

Warning: donetotal不一定以字节为单位的大小,因为对于大文件的这些值可能需要被“缩放”,以避免溢出。

See also get( )put()和QProgressBar

  1. void done (bool)

这是该信号的默认超载。

这个信号被发射时的最后等候命令完成(这是后发出的最后一个命令的commandFinished( )信号) 。error是真的,如果在处理过程中发生错误,否则error是假的。

See also commandFinished( )error()和errorString( ) 。

  1. void listInfo (const QUrlInfo&)

这是该信号的默认超载。

这个信号被发射的每个目录项的list( )命令的发现。条目的详细信息存储在i

See also list( ) 。

  1. void rawCommandReply (int,const QString&)

这是该信号的默认超载。

此信号响应于所述发射rawCommand()函数。replyCode是3位数字应答码和detail是遵循应答码的文本。

See also rawCommand( ) 。

  1. void readyRead ()

这是该信号的默认超载。

此信号响应于被发射get( )命令时有新的数据读取。

如果指定的设备如在第二个参数get()命令,该信号是not射出,而是将数据直接写入到设备。

您可以使用读取数据readAll()或read()函数。

如果你想,只要它成为可用在处理大块数据这个信号是非常有用的。如果你只关心在完整的数据,只需连接到commandFinished( )信号并读取数据,然后代替。

See also get( )read( )readAll()和bytesAvailable( ) 。

  1. void stateChanged (int)

这是该信号的默认超载。

这个信号被发射时的连接状态发生改变。这个论点state是该连接的新的状态,它是一个State值。

它通常是在响应于发射connectToHost()或close()命令,但它也可以被发射的“自发地” ,例如当服务器意外关闭连接。

See also connectToHost( )close( )state()和State