ftpWebReponse (ListDirectory) Утвержденный FTP процесс входа в систему, но не возвращает данные папки

Я экспериментировал с использованием Visual C# для подключения к удаленному FTP-серверу и перечисления папок на сервере. В конечном итоге я пытаюсь выяснить, как автоматически загрузить файл на этот сервер одним нажатием кнопки. Я подумал, что первым делом я посмотрю, как устроены папки на удаленном FTP-сервере. Тем не менее, когда я пытаюсь просмотреть результаты, переданные в отладке, он кажется пустым, хотя я не получил никаких ошибок от процесса, а параметры в отладке выглядят так, как будто я успешно вошел в систему. Я также получил сообщение 226 завершения передачи файла в данных ответа. Вот последний код, который я пробовал, хотя я пробовал разные вещи в функции FtpWebRequest. Если я отключу UsePassive, он будет работать вечно, и я никогда не получу ответ от сервера. У кого-нибудь есть какие-либо идеи по поводу настройки, которая может вызывать этот или какой-либо параметр, который может потребоваться установить?

private void button4_Click(object sender, EventArgs e)
    {
        FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create("ftp://sampleftpplace.com/");
        ftpRequest.UseBinary = true;
        ftpRequest.Credentials = new NetworkCredential("username", "password");
        ftpRequest.EnableSsl = true;
        ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
        ftpRequest.Proxy = null;
        ftpRequest.Timeout = -1;
        ftpRequest.KeepAlive = false;
        //ftpRequest.UsePassive = false;
        FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse();
        StreamReader streamReader = new StreamReader(response.GetResponseStream());

        List<string> directories = new List<string>();

        string line = streamReader.ReadLine();
        while (!string.IsNullOrEmpty(line))
        {
            directories.Add(line);
            line = streamReader.ReadLine();
        }

        streamReader.Close();
    }

Когда "строка строки = streamReader.Readline();" выполняется, переменная "строка" равна нулю. Все, что мне действительно нужно, это посмотреть, какие папки доступны, чтобы я мог видеть, как оригинальный программист FTP-сервера структурировал свои папки и какое соглашение об именах они использовали. Возможно ли это, если этот программист больше не доступен?

1 ответ

У меня просто была сумасшедшая мысль, и оказалось, что это сработало! По сути, я изменил первую пару строк, чтобы читать так:

Uri uri = new Uri("ftp://sampleftpplace.com//");
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(uri);

Сначала я использовал команду Uri. Не уверен, имеет ли это значение или нет, но что действительно имеет значение, так это 2-й "/" в URL-адресе. Я думаю, что сервер не видел его в качестве корневого каталога, пока я не добавил это. Как только я вставил это, я вижу папки теперь. Спасибо!

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