15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Клиент FTP с использованием WININET.

Компилятор: Visual C++

Автор: Pablo van der Meer

Описание

В этой статье представлен многопотоковый клиент FTP, который включает в себя все возможности Проводника Windows, позволяя перемещать и копировать файлы как на локальном компьютере. Для реализации протокола FTP используются API функции.

 

Список возможностей

  • Вся запросы выполняются в фоновом режиме, поэтому нет необходимости ждать завершения копирования файлов. Вы можете даже соединиться с другим сервером, пока идёт процесс копирования.
  • Менеджер передачи показывает прогресс копирования файлов, а так же файлы находящие в очереди.
  • Клиент FTP использует Windows 9x/NT/XP стиль листбоксов для отображения содержимого удалённого сервера, а так же системные иконки и меню.
  • Можно указать количество попыток законнектиться, а так же интервал между попытками соединения с сервером.
  • Полная поддержка Drag-and-Drop. Можно перетаскивать один или несколько файлов и даже целые папки.
  • Простое конфигурирование сайта FTP: имя пользователя, пароль, порт, начальная директория на сервере, количество попыток и папка для скачивания поумолчнию.

Ниже следует краткое описание наиболее важных классов приложения:

CMainFrame

CMainFrame содержит основную часть кода по управлению соединением FTP. Он следит за соединением с сервером, началом закачки/скачивания, а так же обрабатывает другие, связанные с FTP действия.

CFTPListView

Это всего лишь наследованный от CListView класс, который следит за отображением файлов и позволяет сортировать их. Когда приложение занято закачиванием списка директорий, то этот класс отображает анимационную иконку наподобие Проводника.

CConnectDlg

Этот класс (Менеджер сайтов) позволяет пользователю управлять FTP сайтами. Вы можете добавлять/изменять и удалять сайты, а также настраивать такие свойства как адрес сервера, порт, имя пользователя и пароль. Настройки каждого сайта сохраняются на диск при помощи сериализации.

CTransferManagerDlg

CTransferManagerDlg (= Менеджер передачи) следит за очередью передачи файлов. Он показывает текущую передачу всех файлов, а так же файлы находящиеся в очереди. Можно настроить количество одновременно загружаемых файлов, чтобы не расходовать слишком много ресурсов системы. Каждое закачивание/скачивание обрабатывается отдельным потоком при помощи классов CDownloadThread или CUploadThread.

CDownloadThread

CDownloadThread создаёт новое соединение с FTP сервером и отображает диалог прогресса, в котором показывается состояние передачи файла. Когда скачивание завершено (или прервано), класс уведомляет менеджер передачи, чтобы тот обновил пользовательский интерфейс.

CUploadThread

CUploadThread создаёт новое соединение с FTP сервером и отображает диалог прогресса, в котором показывается состояние передачи файла. Когда закачивание завершено (или прервано), класс уведомляет менеджер передачи, чтобы тот обновил пользовательский интерфейс.

Downloads

Скачать демонстрационный пример - 105 Kb
Скачать исходник - 152 Kb