Класс 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