Альтернативы использованию WebRequestMethods.Ftp.GetFileSize ()? - PullRequest
0 голосов
/ 28 сентября 2019

У меня сейчас проблема с тем, что WebRequestMethods.Ftp.GetFileSize () выдает исключение «Файл недоступен (например, файл не найден, не может получить доступ к файлу)».

Я исследовал проблемуи прочитайте, что проблема возникает, потому что мой Ftp-сервер не поддерживает эту функцию.Позже я связался с провайдером своего веб-сервера, который подтвердил, что эта функция не поддерживается, если я не куплю один из их планов VPS (в настоящее время я использую виртуальный хостинг).

// get size of file
FtpWebRequest sizeRequest = (FtpWebRequest)WebRequest.Create("ftp://ftp.domain.com/test.txt");
sizeRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails; // or GetFileSize();
sizeRequest.Credentials = new NetworkCredential("user", "password");
sizeRequest.UsePassive = true;
sizeRequest.UseBinary = true;
sizeRequest.KeepAlive = true;
int size = (int)sizeRequest.GetResponse().ContentLength;

Мой вопрос заключается в том, есть ли решения дляметод GetFileSize ()?Я посмотрел в ListDirectoryDetails.Однако, так как мне нужен только один фрагмент данных, мне нужно будет проанализировать остальные данные, которые после изучения того, как это сделать, потребуются мне некоторое время, чтобы в достаточной степени понять, какой код мне нужно написать, так как я тольконачинающий программист c #.

1 Ответ

0 голосов
/ 30 сентября 2019

Конечно, протокол FTP не имеет двух методов для получения размера файла.И даже если бы он имел, другой метод был бы отключен на вашем сервере так же, как SIZE.


Все остальные параметры включают в себя анализ списка каталогов.

Выможно использовать:

  • MLST - для извлечения атрибутов файла конкретного файла в машиночитаемом формате.Хотя это лучшая альтернатива, но если вы хотите получить размер определенного файла, она не поддерживается FtpWebRequest.Вам придется использовать другую библиотеку FTP.

    Например, с my сборкой WinSCP .NET , вы можете использовать Session.GetFileInfo:

    session.GetFileInfo("/remote/path/file.txt").Length
    
  • MLSD - для получения атрибутов файлов всех файлов в каталоге в машиночитаемом формате.Опять же, не поддерживается FtpWebRequest.

  • LIST - для получения списка каталогов в неопределенном формате.Это поддерживается FtpWebRequest, как вы знаете, с помощью метода ListDirectoryDetails.

    Пример синтаксического анализа в C # см. В моем ответе на:
    Парсинг строки FtpWebRequest ListDirectoryDetails

...