Ошибка FtpWebRequest: 550 Размер не разрешен в режиме ASCII

Я пытаюсь получить размер файла из удаленного файла FTP через анонимный FTP.

public static long GetSize(string ftpPath)
{
    try
    {
        FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpPath));
        request.Proxy = null;
        request.Credentials = new NetworkCredential("anonymous", "´");
        request.UseBinary = true;
        request.Method = WebRequestMethods.Ftp.GetFileSize;

        FtpWebResponse response = (FtpWebResponse)request.GetResponse();
        long size = response.ContentLength;
        response.Close();
        return size;
    }
    catch (WebException e)
    {
        string status = ((FtpWebResponse)e.Response).StatusDescription;
        MessageBox.Show(status);
        return 0;
    }
}

В настоящее время возвращается ошибка "Размер 550 не разрешен в режиме ASCII". Я знаю, что я должен использовать бинарный режим, но настройка UseBinary Значение true (см. выше) не решает проблему.

1 ответ

К сожалению, я думаю, что вы можете застрять. WebRequestMethods.Ftp class, согласно этому сообщению, не будет поддерживать отправку команд FTP, отличных от поддерживаемых, - и для вашего случая использования ваш клиент должен будет отправить "TYPE I" (для "изображения" или двоичного режима) перед отправкой команды SIZE,

В качестве альтернативы, вы можете попробовать загрузить файл - любой файл - перед отправкой команды SIZE. С request.UseBinary = true для этого запроса ваш клиент должен отправить команду "TYPE I" на FTP-сервер. (И это не будет иметь значения, если этот запрос на загрузку завершится неудачно; команда TYPE все еще будет отправлена.) Большинство FTP-серверов, получив команду TYPE, примут этот TYPE для последующих команд. Затем, когда вы пытаетесь GetFileSize запросите снова, FTP-сервер может быть в двоичном, а не в режиме ASCII, и ваша команда SIZE может быть выполнена успешно.

Другие вопросы по тегам