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-адресе. Я думаю, что сервер не видел его в качестве корневого каталога, пока я не добавил это. Как только я вставил это, я вижу папки теперь. Спасибо!