Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск файлов, Поиск файлов по части названия. 
:(
    Опции темы
Grigorill
  Дата 14.8.2011, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 27.1.2011

Репутация: нет
Всего: нет



Здравствуйте подскажите, как осуществить поиск файлов по части названия? То есть например вводим "новая" и он выводит все папки и файлы содержащие эти слова.У меня получилось сделать поиск по названию но необходимо вводить полное название включая расширение, а это неприемлемо.Подскажите пожалуйста может у кого есть статьи или примеры, заранее спасибо.
PM MAIL   Вверх
elena1212
Дата 14.8.2011, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 13.8.2011

Репутация: нет
Всего: нет



Если имя файла - объект класса string, то можно применить метод int string.IndexOf(string Value), который возвращает индекс первого вхождения value в текущем объекте, например:
Код

using System.IO;

        public void Find(DirectoryInfo DrInfo, string fname)
        {
            if (DrInfo.Name.IndexOf(fname)>-1)
                listBox1.Items.Add(DrInfo.FullName);
            FileInfo[] Fi = DrInfo.GetFiles();
            for (int i = 0; i < Fi.Length; i++)
                if (Fi[i].Name.IndexOf(fname)>-1) // если fname входит в Fi[i].Name, то IndexOf вернет позицию >= 0 
                    listBox1.Items.Add(Fi[i].FullName);
            DirectoryInfo[] folder = DrInfo.GetDirectories();
            for (int j = 0; j < folder.Length; j++)
                Find(folder[j],fname);
        }

                   
        private void button1_Click(object sender, EventArgs e)
        {
            DirectoryInfo Dir = new DirectoryInfo("C:\\Папка");
            Find(Dir, "Новая");
        }
 
Если нужен поиск без учета регистра, то нужно перед вызовом IndexOf строку и подстроку привести к одному регистру

Это сообщение отредактировал(а) elena1212 - 14.8.2011, 09:58
PM MAIL   Вверх
Grigorill
Дата 14.8.2011, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 27.1.2011

Репутация: нет
Всего: нет



Спасибо огромное.
PM MAIL   Вверх
Fortnox
Дата 14.8.2011, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 14
Всего: 22



Можно так:
Код

        static IList<string> Find(IList<string> items, string value)
        {
            return items.Where(x => x.Contains(value)).ToList();
        }

        static void GetDirContent(string dir, IList<string> content)
        {
            var dirInfo = new DirectoryInfo(dir);

            //dirs 
            foreach (var d in dirInfo.GetDirectories())
            {
                content.Add(d.Name);
                GetDirContent(d.FullName, content);
            }

            // files
            foreach (var file in dirInfo.GetFiles())
                content.Add(file.Name);
        }

Использование:
Код

        static void Main(string[] args)
        {
            var content = new List<String>();
            GetDirContent(@"D:\Обмен", content);
            var findResult = Find(content, "1");

            foreach (var match in findResult)
                Console.WriteLine(match);

            Console.ReadLine();
        }

PM MAIL   Вверх
Grigorill
Дата 17.8.2011, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 27.1.2011

Репутация: нет
Всего: нет



Fortnox  Спасибо за пример.Подскажите пожалуйста  как вернуть например в Listview помимо имени файла размер? Я пытался  создать так но не вышло.Заранее спасибо.
 
Код

 public IList<string> Find(IList<string> items,List<string> length, string value)
        {
           
                return items.Where(x => x.Contains(value)).ToList();
            
            
        }
        public List<string> Find2( List<string> length,string value)
        {

            return length;


        }
        
        public void GetDirContent(string dir, IList<string> content,List<string> length)
   {
    try
    {
        var dirInfo = new DirectoryInfo(dir);
         
        foreach (var d in dirInfo.GetDirectories())
        {
            content.Add(d.Name);
            GetDirContent(d.FullName, content,length);
        }
       
        foreach (FileInfo file in dirInfo.GetFiles())
        {
            
           
            content.Add(file.FullName);
            length.Add(file.Length.ToString());
            
        }
        }
    catch (UnauthorizedAccessException) {
        return;
    }
  }
        public void Main()
        {
            string na = textBox2.Text;
            string pa = textBox1.Text;
            var content = new List<String>();
            var length = new List<String>();
            GetDirContent(pa, content,length);
            var findResult = Find(content,length, na);
            var findlength = Find2(length,na);
            foreach (var match in findResult)
            {
                ListViewItem i = new ListViewItem(match);
                foreach (var le in findlength)
                {
                    i.SubItems.Add(le);
                }
                listView1.Items.Add(i);
            }
        }


PM MAIL   Вверх
Fortnox
Дата 18.8.2011, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 14
Всего: 22



Прилагаю пример.

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  WindowsFormsApplication3.zip 46,73 Kb
PM MAIL   Вверх
Grigorill
Дата 18.8.2011, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 27.1.2011

Репутация: нет
Всего: нет



Вот это да, Спасибо огромное!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0447 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.