Заполните ComboBox именами файлов из каталога на FTP-сервере

У меня есть папка с файлами на моем FTP-сервере, и я хочу заполнить ComboBox с содержимым внутри этой папки. Как бы я поступил так?

string result = string.Empty;

//Request location and server name---------->
FtpWebRequest request = 
    (FtpWebRequest)WebRequest.Create("ftp://*******" +"/" + "Products" + "/");

//Lists directory
request.Method = WebRequestMethods.Ftp.ListDirectory;

// set credentials
request.Credentials = new NetworkCredential("user1","1234");
//initialize response
FtpWebResponse response = (FtpWebResponse)request.GetResponse();

//reader to read response
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
combobox1.Text = FTP_Server();
//data from file.
result = reader.ReadToEnd();
reader.Close();
response.Close();

Спасибо! Я не знал, возможно ли это вообще!

2 ответа

Читайте список по строкам:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://example.com/remote/path/");
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = new NetworkCredential("username", "password");

comboBox1.BeginUpdate();
try
{
    using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
    using (Stream stream = response.GetResponseStream())
    using (StreamReader reader = new StreamReader(stream))
    {
        while (!reader.EndOfStream)
        {
            comboBox1.Items.Add(reader.ReadLine());
        }
    }
}
finally
{
    comboBox1.EndUpdate();
}

Загрузка всего списка в строку и последующее его разбиение (как предполагает другой ответ) может быть довольно неэффективным, если в нем много записей.

Не зная точного формата вашей строки ответа, мой инстинкт был бы разделить строку ответа:

string files[] = result.Split("\r\n");

Затем перебрать отдельные файлы, добавив их в свой комбобокс1 Items:

// Depending on how many items you're adding, you may wish to prevent a repaint until the operation is finished
combobox1.BeginUpdate();
foreach(string file in files)
{
    combobox1.Items.Add(file);
}
combobox1.EndUpdate();

Это должно позаботиться об этом для вас! На MSDN также есть отличная (и исчерпывающая) документация, которая часто будет содержать некоторые примеры использования, чтобы помочь вам в дальнейшем: https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox(v=vs.110).aspx

Обратите внимание, что если вы захотите отобразить информацию из другого ответа FTP, вам сначала нужно очистить combobox1, как показано ниже: combobox1.Items.Clear();

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