Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2014, 14:56   #1
master2sid2
 
Регистрация: 25.03.2014
Сообщений: 5
По умолчанию считать имя папки.

Пишу прогу, которая должна производить поиск в определённом каталоге по имени вложенных каталогов на наличие символов в названии, затем при совпадении записывать количество найденных папок в Textbox.
С поиском вроде разобрался, делаю через:
Код:
string[] dirs = Directory.GetFiles(@"c:\RK6FR\OLDRES", ".07");
но не как не могу разобраться как передать значение найденных папок в textbox.

Прошу по голове сильно не бить, я только начинаю изучать программирование, поэтому буду рад любым ответам.
master2sid2 вне форума Ответить с цитированием
Старый 25.03.2014, 15:35   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

1) GetDirectories(), a не GetFiles()
2) "*.07" а не ".07"
3) String.Join()
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 26.03.2014, 01:35   #3
master2sid2
 
Регистрация: 25.03.2014
Сообщений: 5
По умолчанию

Luzzuk,
Ваш вариант немного не то, по нему я смогу получить путь и имя папки и отобразить в textbox-e.

На данный момент я реализовал подсчет следующим способом:

Код:
int i = 0;
i += Directory.GetDirectories(@"c:\RK6FR\OLDRES", "*.07").Length;
this.a3.Text = i.ToString();
Теперь есть ещё один вопрос, имена папок это по сути определённая дата в формате 25-03-14.07, нужно проверить наличие папки с кодом .07 за последние 7 дней и записать их названия в textbox. т.е. есть несколько папок с разными кодами к примеру от 1 до 7. Папки создаются с датой в начале имени выше-упомянутого примера. Папки есть за все числа текущего месяца, но посчитать нужно только последние 7 для каждого кода. Искать нужно именно по имени папки так как папка с числом 19-03-14.07 может быть создана 25-03-14.07. Как я понимаю нужно найти все папки с кодом .07 в конце названия папки, найти в двух первых цифрах названия папки 7 самых больших и значения с именами папок записать в 7 разных textbox-ов, для каждой папки свой textbox. Вот насчет реализации пока не как не соображу. Подскажите в какую сторону копать/смотреть а я уже буду как-то сам разбираться.

update:
С подсчетом вроде немного определился, можно создать безразмерный массив для каждой группы папок с кодом:
Код:
int[] i = 0;
i[0] += Directory.GetDirectories(@"c:\RK6FR\OLDRES", "*.07").Length;
a1.Text = i[0].ToString();
Дальше определить размер массива и определить первые 2 числа названия папок 7 последних элементов массива. Хочу услышать ваше мнение.

Последний раз редактировалось master2sid2; 26.03.2014 в 02:55.
master2sid2 вне форума Ответить с цитированием
Старый 26.03.2014, 17:09   #4
master2sid2
 
Регистрация: 25.03.2014
Сообщений: 5
По умолчанию

Массив я построил:
Код:
string[] dirs1 = Directory.GetDirectories(@"c:\RK6FR\OLDRES","*.07");
int mass = dirs1.Length;
А как мне теперь посчитать 7 последних элементов массива?

Нашел способ как вытащить необходимый мне элемент из массива, но когда пытаюсь получить значение элемента, получаю строку System.String[]. Не могу разобраться как мне получить именно значение которое присутствует в переменной results. Прошу помощи

Код:
            string fields1 = mon.Text;
            string[] dirs1 = Directory.GetDirectories(@"c:\RK6FR\OLDRES","*.06",SearchOption.AllDirectories);
            var results = Array.FindAll(dirs1, s => s.Equals(fields1));
            textBox3.Text = results.ToString();
Итак на данній момент имею следующие:
Код:
            string fields1 = mon.Text;
            string path = "C:\\RK6FR\\OLDRES\\";
            string[] dirs1 = Directory.GetDirectories(@"C:\RK6FR\OLDRES","*.06",SearchOption.AllDirectories);
            string fields2 = path += fields1 += ".06";

            var results = dirs1.FirstOrDefault(s => s.Equals(fields2));

            if (results.Equals(fields2)==true)
            {
                a1.BackColor = System.Drawing.Color.Green;
            }
            else
            {
                a1.BackColor = System.Drawing.Color.Red;
            }
Переменная results возвращает значение тоже что и fields2 и при наличии необходимого каталога всё прекрасно работает. Но если данного каталога нет (не скопировался, удалить, переименовать) то программа вылетает с ошибкой
Цитата:
Ссылка на объект не указывает на экземпляр объекта.
Подскажите куда копать?

Последний раз редактировалось Stilet; 31.03.2014 в 11:53.
master2sid2 вне форума Ответить с цитированием
Старый 31.03.2014, 11:51   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Если надо получить все элементы массива, то
Код:
textBox3.Text = string.Join(' ; ', results);
Если один, то
Код:
var results = Array.Find(dirs1, s => s.Equals(fields1));
textBox3.Text = results.ToString();
Как-то так, за точность не ручаюсь, писал прямо тут.

ПС. Ошибку (пустой результат поиска) после FindAll можно отлавливать по results.Length != 0
После Find/FirstOrDefault по != null думаю

Последний раз редактировалось phomm; 31.03.2014 в 12:06.
phomm вне форума Ответить с цитированием
Старый 31.03.2014, 13:33   #6
master2sid2
 
Регистрация: 25.03.2014
Сообщений: 5
По умолчанию

Как я понял при
Код:
            if (results.Equals(fields2)==true)
            {
                a1.BackColor = System.Drawing.Color.Green;
            }
            else
            {
                a1.BackColor = System.Drawing.Color.Red;
            }
сверяется наличие нужной строки в массиве, так как данной строки в массиве нету, программа вылетает с ошибкой. Можно ли как-то иначе представить сравнение для значения false, если нужной строки в массиве не обнаружено?

Последний раз редактировалось master2sid2; 31.03.2014 в 13:59.
master2sid2 вне форума Ответить с цитированием
Старый 31.03.2014, 14:40   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Дело в том, что results сам по себе пустой, null скорее всего - посмотрите точнее в отладке - F9 на этой строке, F5 - запуск и произвести действие для вызова этого кода, когда отладчик на нём остановится, подвести мышку на results и если он покажет null то значит именно так, как я описываю, и избегать надо теми способами, что я указал выше.
phomm вне форума Ответить с цитированием
Старый 31.03.2014, 17:59   #8
master2sid2
 
Регистрация: 25.03.2014
Сообщений: 5
По умолчанию

Вроде бы как получилось сделать следующим образом:



Код:
string fields1a = mon.Text;
            string path1a = "C:\\RK6FR\\OLDRES\\";
            string[] dirs1 = Directory.GetDirectories(@"C:\RK6FR\OLDRES","*.06",SearchOption.AllDirectories);
            string fields2a = path1a += fields1a += ".06";

            var results1 = dirs1.FirstOrDefault(s => s.Equals(fields2a)) != null;

            if (results1 == true)
            {
                a1.BackColor = System.Drawing.Color.Green;
            }
            else if (results1 == false)
            {
                a1.BackColor = System.Drawing.Color.Red;
            }
По крайней мере необходимую функцию выполняет, и не вылетает при отсутствии каталога.
Дальнейшие ошибки уже буду выцеплять по мере использования. Спасибо тем кто откликнулся.
master2sid2 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Узнать имя папки terpyohok Общие вопросы Delphi 6 06.11.2012 13:10
Случайное имя папки MAO_NET Общие вопросы Delphi 14 23.03.2011 10:20
как узнать имя папки? KWNlnc Общие вопросы Delphi 1 14.04.2010 17:45
Как считать hostid и/или имя компьютера Ирина_28 Работа с сетью в Delphi 5 17.08.2009 09:03
Выбрать имя папки из директории Македонский Общие вопросы Delphi 15 29.08.2007 10:48