Поиск в каталоге NTFS .NET - PullRequest
1 голос
/ 07 марта 2009

Я хотел бы написать веб-страницу, где пользователи могут искать каталог в NTFS по определенным критериям и отображать результаты.

Нужно ли индексировать каталог?

Есть ли доступный .NET API поиска Windows, который я могу использовать для запроса каталога?

Ответы [ 5 ]

3 голосов
/ 08 марта 2009

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

Использование выглядит так:

   Ionic.FileSelector ff = new Ionic.FileSelector(selectionCriteria);
   var filesToAdd = ff.SelectFiles(directoryOnDisk, recurseDirectories);

Критерии выбора таковы:

*.txt
name = *.txt
size > 10000
name = *.txt and size > 20000
attributes = H and name = *.doc
name = *.cs~ and mtime < 2009-02-14
mtime < 2009-01-01 and (name = *.cs or name = *.vb)
(name = '* Report.docx'  or  name = *.pptx)

... где mtime подразумевает «время последней записи», atime - «время последнего доступа», ctime - «время создания», а атрибуты относятся к набору атрибутов NTFS, таким как System, Hidden, Readonly, Archive и ContentIndexed (S, H, R, A, I).

Одинарные кавычки необходимы вокруг шаблонов имен файлов только при наличии пробела.

Вы можете взять источник для этого класса селектора файлов и использовать его где угодно.

3 голосов
/ 07 марта 2009

Все, что вы получаете, это System.IO.DirectoryInfo, и он даже не имеет встроенного поиска.

Большинство людей заканчивают тем, что пишут рекурсивный метод, который вызывает getDirectories и getFiles для каждого DirectoryInfo.

2 голосов
/ 07 марта 2009

Вы можете использовать API поиска Windows таким образом , но мне это не очень нравится.

Если у вас есть время самостоятельно проиндексировать каталог, я рекомендую попробовать Lucene.net , что наверняка быстрее, чем служба индексации Windows.

В любом случае, самый короткий путь - это использовать System.IO.DirectoryInfo.GetDirectories.

1 голос
/ 07 марта 2009

Если вы используете .NET 2.0 или выше (и VB.Net), вы можете использовать Метод My.Computer.FileSystem.GetFiles . Этот метод имеет три параметра:

  • Каталог
  • SearchType (перечисление)
  • Wildcards

Перечисление SearchType имеет два значения, одно из которых SearchAllSubDirectories . Итак, 1 метод, который возвращает коллекцию строк ReadOnly со всеми соответствующими файлами (именами).

Если вы используете C #, вы можете использовать DirectoryInfo.GetFiles Method . В DirectoryInfo.GetFiles есть только 2 параметра:

  • SearchPattern
  • SearchOption

Если вы укажете AllDirectories для SearchOption, вы получите аналогичный результат.

Ключевое отличие состоит в том, что FileSystem.GetFiles возвращает коллекцию строк, а DirectoryInfo.GetFiles возвращает массив объектов FileInfo.

1 голос
/ 07 марта 2009

DirectoryInfo.GetFiles поддерживает рекурсию через подкаталоги. Это один из перегруженных методов. Это позволяет вам фильтровать только по имени файла.

...