Команды протокола FTP

Последнее обновление: 31.10.2022

Начиная с версии .NET 6 microsoft НЕ рекомендует использовать данный API для работы с FTP и при необходимости для работы с FTP рекомендует обращаться к сторонним библиотекам.

Для выполнения запросов в протоколе FTP используются команды. Например, команда LIST предназначена для получения списка файлов каталога сервера, команда STOR применяется для сохранения файла и так далее. В .NET для отправки нужной команды нам не надо запихивать ее в тело запроса, так как можно использовать свойство Method класса FtpWebRequest.

Этот метод в качестве значения принимает строки, определенные в классе WebRequestMethods.Ftp:

  • AppendFile: добавляет в запрос команду APPE, которая используется для присоединения файла к существующему файлу на FTP-сервере

  • DeleteFile: добавляет в запрос команду DELE, которая используется для удаления файла на FTP-сервере

  • DownloadFile: добавляет команду RETR, которая используется для загрузки файла

  • GetDateTimestamp: представляет команду MDTM, которая применяется для получения даты и времени из файла

  • GetFileSize: команда SIZE, получение размера файла

  • ListDirectory: команда NLIST, возвращает краткий список файлов на сервере

  • ListDirectoryDetails: команда LIST, возвращает подробный список файлов на FTP-сервере

  • MakeDirectory: команда MKD, создает каталог на FTP-сервере

  • PrintWorkingDirectory: команда PWD, отображает имя текущего рабочего каталога

  • RemoveDirectory: команда RMD, удаляет каталог

  • Rename: команда RENAME, переименовывает каталог

  • UploadFile: команда STOR, загружает файл на FTP-сервер

  • UploadFileWithUniqueName: команда STOU, загружает файл с уникальным именем на FTP-сервер

Однако в реальности при работе с конкретными ftp-серверами нам не все эти команды будут доступны в силу ограничений на чтение/запись на стороне сервера, которые может установить администратор.

Например, загрузим текстовый файл на фтп-сервер:

using System;
using System.IO;
using System.Net;
using System.Text;

namespace FtpConsoleClient
{
    class Program
    {
        static void Main(string[] args)
        {
            // Создаем объект FtpWebRequest - он указывает на файл, который будет создан
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://127.0.0.1/hellow.txt");
            // устанавливаем метод на загрузку файлов
            request.Method = WebRequestMethods.Ftp.UploadFile;

            // создаем поток для загрузки файла
            FileStream fs = new FileStream("D://test.txt", FileMode.Open);
            byte[] fileContents = new byte[fs.Length];
            fs.Read(fileContents, 0, fileContents.Length);
            fs.Close();
            request.ContentLength = fileContents.Length;

            // пишем считанный в массив байтов файл в выходной поток
            Stream requestStream = request.GetRequestStream();
            requestStream.Write(fileContents, 0, fileContents.Length);
            requestStream.Close();

            // получаем ответ от сервера в виде объекта FtpWebResponse
            FtpWebResponse response = (FtpWebResponse)request.GetResponse();

            Console.WriteLine("Загрузка файлов завершена. Статус: {0}", response.StatusDescription);

            response.Close();
            Console.Read();
        }
    }
}

Для загрузки на сервер у нас, естественно, должны быть права на запись. Возможно, потребуется установить логин и пароль для доступа к серверу.

С помощью другой команды получим содержимое сервера:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://127.0.0.1/");

request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;

FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Console.WriteLine("Содержимое сервера:");
Console.WriteLine();

Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
Console.WriteLine(reader.ReadToEnd());

reader.Close();
responseStream.Close();
response.Close();
Console.Read();

Поскольку в данном случае сервер возвращает текстовую информацию о файлах и каталогах, то с помощью объекта StreamReader мы можем считать ее и вывести на консоль:

Использование FTP в C# и .NET
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850