2015-06-24 3 views
0

Я новичок, пытающийся заполнить раскрывающийся список Months, основанный на том, существуют ли каталоги для определенного месяца.Loop для проверки наличия каталогов

Я знаю имена каталогов будет январь 2010, февраль 2010, март 2015 и так далее ...

настоящее время я использую ...

if (System.IO.Directory.Exists("C:\\Desktop\\Month\\Jan\\")) 
{ 
    DropDownList1.Items.Add("Jan 2015"); 
} 
if (System.IO.Directory.Exists("C:\\Desktop\\Month\\Feb\\")) 
{ 
    DropDownList1.Items.Add("Feb 2015"); 
} 
if (System.IO.Directory.Exists("C:\\Desktop\\Month\\March\\")) 
{ 
    DropDownList1.Items.Add("March 2015"); 
} 

Как я могу сделать это проще? Я просто хочу, чтобы цикл, и если каталог существует, добавьте определенное имя в раскрывающийся список.

+0

Вы * * пытались реализовать его с помощью цикла? –

+0

Создайте строковый массив с именем месяца (или независимо от имени папки), а затем просто пропустите массив и разделите каждую запись до последней косой черты – Vajura

+2

Являются ли каталоги «Jan» и «Feb» или «Jan 2010 »и« Feb 2010 »? Вы говорите, что они последние, но ваш код ищет первый. – juharr

ответ

3

Вы можете хранить месяцев в списке и итерацию над ним:

List<string> months = new List<string>() 
{ 
    "Jan", "Feb", "Mar", "Apr", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec" 
}; 

foreach (string month in months) 
{ 
    if (System.IO.File.Exists("C:\\Desktop\\Month\\" + month)) 
    { 
     DropDownList1.Items.Add(month + " 2015"); 
    } 
} 

Или, если вам нравится Linq:

foreach (string mounth in mounths.Where(mounth => System.IO.Directory.Exists("C:\\Desktop\\Month\\" + mounth))) 
{ 
    DropDownList1.Items.Add(mounth + " 2015"); 
} 

Если вы хотите, чтобы мне автоматический материал:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); // <== Or any culture you like 
List<string> monthNames = new List<string>(System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.MonthGenitiveNames); 
foreach (string month in months) 
{ 
    if (System.IO.Directory.Exists("C:\\Desktop\\Month\\" + month)) 
    { 
     DropDownList1.Items.Add(month + " 2015"); 
    } 
} 
+2

Это' March' вместо 'Mar', иначе вам не нужно вручную создавать список:' var allMonthNames = Enumerable.Range (1, 12) .Выберите (i => DateTimeFormatInfo.InvariantInfo.GetAbbreviatedMonthName (i)). ToList(); ' –

+0

@TimSchmelter Да, мы можем создать его из' Date', я добавлю его , но я предпочитаю, чтобы OP делал выбор –

+0

Отлично - первый вариант работы просто должен был изменить if (System.IO.File.Exist .... to if (System.IO.Directory.Exists ... Спасибо для вашей помощи я не мог придумать, какое условие использовать для цикла. – KlydeMonroe

0

Одна мысль, что приходит на ум, что вы можете использовать что-то вроде этого

List<String> wehaveadd = new List<String>(); 
    wehaveadd.Add("Jan"); 
    wehaveadd.Add("Feb"); // do all the months 

    foreach(var item in wehaveadd){ 
    var path = "C:\\Desktop\\Month\\" + item; 
    if (System.IO.Directory.Exists(path)) 
    { 
     DropDownList1.Items.Add(item + " 2015"); 
    } 
    } 
+0

Похоже, что все каталоги находятся на одном уровне, поэтому нет необходимости в рекурсии. – juharr

+0

Я обновил свой ответ @juharr – Devesh

+0

Вы должны удалить этот комментарий о «создании рекурсивного вызова каталога», поскольку вы просто зацикливаете на списке. – juharr

1

Другой подход в этом один:

string src = @"C:\Desktop\Month\";    
string[] values = { "Jan", "Feb", "March", "Apr", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec"}; 
DropDownList1.Items.AddRange(Directory.GetDirectories(src).Where(d => months.Contains(d.Replace(src, ""))).Select(d => d.Replace(src, ""))); 
Смежные вопросы