Работа с FTP сервером из C#
Наверное многие сталкивались с необходимостью создать простой FTP клиент для своих нужд на C#. Вот и меня не миновало. Недавно пришлось делать специфическое приложение для обновления ПО через FTP. И самым полезным что я нашёл для этой цели оказался набор библиотечек (кстати с исходниками) BytesRoad.NetSuit. Очень простой компонент предоставляющий весь основной функционал для работы с FTP.
В коплекте 3 библиотеки:
BytesRoad.Diag.dll
BytesRoad.Net.Ftp.dll
BytesRoad.Net.Sockets.dll
Добавляем в наш проект как References вот эти две библиотеки:
BytesRoad.Net.Ftp.dll
BytesRoad.Net.Sockets.dll
Далее о том как работать с компонентом…
Устанавливаем соединение с сервером:
//Сам клиент ФТП
FtpClient client = new FtpClient();
//Задаём параметры клиента.
client.PassiveMode = true; //Включаем пассивный режим.
int TimeoutFTP = 30000; //Таймаут.
string FTP_SERVER = "адрес фтп сервера";
int FTP_PORT = "порт ФТП сервера";
string FTP_USER = "пользователь";
string FTP_PASSWORD = "пароль";
//Если используется прокси сервер то можем задать параметры прокси.
FtpProxyInfo pinfo = new FtpProxyInfo(); //Это переменная параметров.
pinfo.Server = "192.168.0.202";
pinfo.Port = 21; //Порт.
pinfo.Type = FtpProxyType.HttpConnect; //Тип прокси - всего 4 вида.
pinfo.PreAuthenticate = true; //Если на прокси есть идентификация
pinfo.User = "Имя пользователя";
pinfo.Password = "Пароль пользователя";
//Присваиваем параметры прокси клиенту.
client.ProxyInfo = pinfo;
//Подключаемся к FTP серверу.
client.Connect(TimeoutFTP, FTP_SERVER, FTP_PORT);
client.Login(TimeoutFTP, FTP_USER, FTP_PASSWORD);
//
//.... Здесь выполняем то что хотим с сервером ...
//
//Отключаемся от ФТП сервера
client.Disconnect(TimeoutFTP);
Теперь немного о самых основных методах для работы с FTP сервером:
//Получает список содержимого текущего каталога с FTP.
client.GetDirectoryList(TimeoutFTP);
//Меняет директорию на указанную.
//Можно переходить вверх указав вместо имени папки ".." либо в любую папку расположенную в текущей.
client.ChangeDirectory(TimeoutFTP, "папка");
//Удаляет указанный файл с сервера.
client.DeleteFile(TimeoutFTP, "файл");
//Удаляет указанную папку с сервера.
client.DeleteDirectory(TimeoutFTP, "файл");
//Принимает указанный файл с сервера.
client.GetFile(TimeoutFTP, "куда принимаем - путь на диске", "Что принимаем - файл на сервере");
//загружаем файл на сервер.
client.PutFile(TimeoutFTP, "имя файла на сервере", "что грузим - имя файла на компьютере");
Как уже полагаю заметили, довольно неудобно что надо каждый раз указывать таймаут.
Но впринципе с этим можно смириться, остальное то всё работает.
Я бы как обычно привёл ссылочку на сайт разработчика где можно скачать компонент, но похоже сайт разработчика не пережил кризиса :). Поэтому отступлю от своего правила, библиотеку можно взять здесь:
Скачать файл: bytesroad_netsuit_2_0.zip [1.26 Mb] (cкачиваний: 30)
Также я написал маленький примерчик работы с этим компонентом,(загрузка удаление и получение файлов в примере реализоавны по правой кнопке в выпадающем меню).
Вот скриншоты:
А вот сам исходник:
Скачать файл: bytesroadftpexample.rar [308.22 Kb] (cкачиваний: 41)