Класс QFtp


Для облегчения работы Qt предоставляет специализированные классы QFtp и QHttp, базирующиеся на классе QObject. Работа этих классов асинхронна, поэтому не нужно бояться того, что приложение будет заблокировано на время отправки сообщений или получения данных. Для того чтобы получать информацию о процессе выполнения команд, эти классы предоставляют сигналы, которые можно соединить, например, для визуального отображения, со слотом setProgress() виджета индикатора прогресса. В конце выполнения операций высылается сигнал done().

Передача файлов является часто выполняемой операцией практически во всех сетях. FTP (File Transfer Protocol, протокол передачи файлов) — наиболее известный из старых протоколов и являющийся одной из первых сетевых служб. Целью создания этого протокола было предоставление пользователям доступа к файлам на удаленном компьютере. Кроме предоставляемого сервиса, протокол имеет целый ряд команд, с помощью которых можно управлять удаленным компьютером для передачи данных. Например:

  • get — скопировать файл с удаленного сервера;
  • put — копировать файл на удаленный сервер;
  • rmdir — удалить каталог на удаленном сервере;
  • mkdir — создать каталог на удаленном сервере;
  • cd — открыть каталог на удаленном сервере;
  • rename — переименовать файл или каталог на удаленном сервере;
  • close — закрыть соединение с удаленным сервером.

Класс QFtp реализует сторону клиента FTP-протокола и содержит в себе методы для наиболее часто используемых операций с FTP. Названия этих методов соответствует названиям FTP-команд, например: get() соответствует команде get, a put () — команде put и т. д. Также класс QFtp предоставляет возможность исполнения любых FTP-команд. Для этого в метод rawCommand() нужно передать строку, содержащую нужную команду. Например:


ftp.rawCommand("MKDIR MyDir");

Каждый из методов возвращает идентификационный номер, который используется в сигналах класса QFtp. Этим можно воспользоваться для оповещения пользователя о проводимых операциях. Например, в начале исполнения одной из команд объект класса QFtp высылает сигнал commandStarted(int), a по завершению команды высылается сигнал commandFinished(int, bool). При этом идентификационный номер проводимой операции содержится в параметре типа int.

Класс QFtp содержит методы для осуществления соединения с FTP-сервером: connectToHost(), login(). Листинг демонстрирует считывание файла index.txt, размещенного на удаленном компьютере, посредством команд FTP, и запись его в текущей директории под именем index.txt. Для этого сначала создается объект класса QFile и открывается файл для записи, а затем запускается серия из пяти FTP-команд. Обратите внимание на второй аргумент метода get(), с помощью которого задается устройство ввода/вывода.


QFile file("index.txt");
QFtp ftp; 
if (file.open(QIODevice::WriteOnly))
{
  ftp.connectToHost("ftp.microsoft.com"); 
  ftp.login(); 
  ftp.cd("Softlib"); 
  ftp.get("index.txt", &file); 
  ftp.close(); 
  file.close();
}

Читать далее: Класс QHttp