Как организовать поиск файлов на C#

{lang: 'ru'}

Как то раз я подумал: «А ведь иногда при вводе имени файла по запросу программы, он может точно не знать путь к нему, однако быть уверенным в том, что файл с таким названием существует. Возможно, иногда может быть полезным добавить в программу функцию поиска файла, чтобы она могла сама найти его, например, во вложенных файлах или через тот же интерфейс уточнить, есть такой или нет» Естественно, полез за ответом в поисковик. Естественно, интересовала реализация на C#, т.к. работаю я сейчас на этом языке и надо бы его потихоньку изучать и узнавать получше его возможности. По соответствующему запросу (который выглядел точно так же, как и заголовок статьи – «поиск файлов на C#«) нашел несколько форумов, на одном из которых был дан ответ.

Я решил сделать небольшую программку для поиска заданного файла в заданном и каталоге и подпапках. Здесь мне хочется привести пример её кода и поделиться некоторыми проблемами, которые возникли при отладке.

Ниже представлены эти самые «особенности» программы:

  • при попытке искать в защищенном каталоге программа выдаст ошибку и остановит поиск;
  • выяснилось, что конструкция ‘/’ воспринимается не как один символ, а как несколько; причем означают они по утверждению Visual Studio «конец строки».

Это те проблемы, которые решить мне пока не удалось. И если вторую я смог обойти (изменив несколько задуманный функционал программы), то первая все-еще портит впечатление и удовольствие от использования своей программы.

Итак, вот пример кода:


Надеюсь, что благодаря комментариям в коде большинство возможных вопросов разрешится.

Однако, все-таки отмечу некоторые моменты подробнее:

  • Поиск поддиректорий в директории активируется, только если функции FindInDir в качестве 3-его параметра придет «true»;
  • На форму был кинут элемент FolderBrowserDialog. Именно он появляется при нажатии кнопки «Обзор…»;
  • Запуск файла осуществляется через проводник командой Process.Start(«Путь к файлу или папке»).

Итак, что делает данная программа:

  1. Нужное имя файла и корневая папка для поиска задаются в соответствующих полях.
  2. Имя папки можно как ввести вручную, так и выбрать с помощью диалога после нажатия кнопки «Обзор…».
  3. Если галочка установлена, то поиск будет происходить также в подпапках. Если нет – то не будет. (По умолчанию галочка стоит).
  4. После нажатия кнопки «Искать!» происходит поиск заданного файла в заданной директории.
    Если на этом этапе возникает какая либо ошибка (например, не указано имя корневой папки), то выдается сообщение об этом и дальнейший поиск останавливается.
  5. Если в процессе поиска обнаруживаются соответствующие запросу файлы, то они выводятся списком в элемент управления ListBox, расположенный под кнопкой «Искать!»
  6. По двойному клику левой кнопки мыши на элементе из списка, происходит его открытие стандартной программой для данного типа файлов.
  7. Есть возможность очищать поле результатов. Для этого необходимо нажать кнопку «Очистить».
  8. Чтобы очистить как поле результатов, так и поля с данными для поиска, необходимо нажать кнопку «Очистить все».
  9. При осуществлении нового поиска результаты предыдущего автоматически стираются.

Вот исходник моей программы для поиска файлов на компьютере.


Полезная статья? Их будет больше, если вы поддержите меня!


  • Владилена

    Спасибо огромное!!!!! Сама при вводе в поисковик «работа с файлами С#» нашла только пару форумов… Если бы не ты, то так бы и мучилась. Программа полностью работоспособна! Спасибо, спасибо, спасибо!

  • Подскажите как скомпилировать код.

    Виндовс апликейшн выбираю , вставляю код с помощью копи паста , нажимаю CTRL+F5 вываливает гору ошибок.

    Объясните как скомпилировать плиз! Очень надо.

    Просьба отозваться как можно быстрее. Сори в С новичок.

  • Rossky

    Виктор, а зачем использовать копи-паст, если выложен архив с рабочим примером?
    Ну а если такое дикое желание усложнять себе жизнь — тогда надо не забыть создать кнопки на форме и привязать к ним нужные события. Как? Смотри упомянутый выше архив с кодом.

  • Rossky, спасибо сразу не заметил)

    У вас есть аська или скайп? рад был бы пообщаться =)

  • Rossky

    Можно попробовать стукнуть в аську шесть1678ноль2пять4

  • Екатерина

    Здравствуйте. А не подскажете как модернизировать программу, чтобы она искала одинаковые файлы в нескольких подкаталогах выбранного каталога; в логическом диске; в нескольких локальных дисках ПК.

  • Екатерина

    Можно использовать готовые dll, win32 api

  • Екатерина

    Одинаковые файлы — файлы с одинаковыми именами и размерами.

  • Rossky

    Екатерина, здравствуйте. К сожалению, я не могу подсказать ничего конкретного по вашему вопросу. Единственное, если вы действительно собираетесь определять «одинаковость» файлов только по их именам и размерам, то мне кажется, что здесь должно быть не сложным получить информацию о размере конкретного файла. Главное, не забыть, что даже файлы с одинаковым именем и размером все еще могут быть разными, и проверить это дополнительно.