D1m0nd
@D1m0nd
junior C# developer

Как прочитать размер файла по FTP?

Как прочитать размер файла по FTP? Каждый раз, когда пытаюсь это сделать, получаю в ответе 550 , типа файл не найден, при этом другие методы, связанные к примеру с датой работают и находят его
//не работает
public long GetFileSize(string fileName) {
        var request = createRequest(combine(SERVER, fileName), WebRequestMethods.Ftp.GetFileSize);
        Console.WriteLine(combine(SERVER, fileName));
        using (var response = (FtpWebResponse)request.GetResponse()) {
            return response.ContentLength;
        }
    }
//работает нормально
public DateTime GetDateTimestamp(string fileName) {
        var request = createRequest(combine(SERVER, fileName), WebRequestMethods.Ftp.GetDateTimestamp);
			
        using (var response = (FtpWebResponse)request.GetResponse()) {
            return response.LastModified;
        }
    }

В папке вроде разрешения все стоят.
  • Вопрос задан
  • 783 просмотра
Решения вопроса 1
ayazer
@ayazer
Sr. Software Engineer
550 Requested action not taken. File unavailable (e.g., file not found, no access). (тык)

есть SIZE, но это не часть фтп протокола, потому не все сервера это поддерживают (хотя в этом случае должен был быть другой код ошибки). может быть ваш фтп клиент пытается отправить MLSD/LIST чтоб получить информацию про все файлы, и потом выдрать размер нужного. И если у пользователя нет на это прав - 550 смотрится правдоподобно. т.е. если вы случайно не передаете разные filename - это НЕ проблема вашего кода

В целом - смотрите логи фтп. Если доступа к админ консоли сервера нету - посмотрите про наличие дебаг режима в самой библиотеке. В идеале вам нужено получить полный список всех запросов/ответов которые отправляются. Если эта библиотека так не умеет - выкиньте и возьмите другую. Мы в свое время остановились на FluentFtp (правда пришлось немного поконтрибьютить чтоб допилить в ней нужную фичу), и у нее точно есть дебаг режим

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

Войдите, чтобы написать ответ

Похожие вопросы