搜索NTFS目录.NET

时间:2009-03-07 00:08:45

标签: .net search ntfs

我想写一个网页,用户可以在NTFS上搜索某个条件的目录并显示结果。

目录是否必须编入索引?

我可以使用.NET可访问的Windows搜索API来查询目录吗?

5 个答案:

答案 0 :(得分:3)

你得到的只是System.IO.DirectoryInfo,它甚至没有内置搜索功能。

大多数人最终都会编写一个递归方法,在每个DirectoryInfo上调用getDirectories和getFiles。

答案 1 :(得分:3)

This是一个名为FileSelector的可重用类,它根据名称(带通配符),大小,时间戳和属性进行文件选择。

用法是这样的:

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

selectionCriteria是这样的:

*.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,Hid​​den,Readonly,Archive和ContentIndexed (S,H,R,A,I)。

只有在存在中间空间时,才需要在文件名模式周围使用单引号。

您可以获取此文件选择器类的源代码并在任何地方使用它。

答案 2 :(得分:2)

您可以使用Windows搜索API this way,但我不是那么喜欢。

如果您有时间自己索引目录,我建议您尝试Lucene.net,这肯定比Windows索引服务更快。

无论如何,最短的方法是使用System.IO.DirectoryInfo.GetDirectories。

答案 3 :(得分:1)

DirectoryInfo.GetFiles支持通过子目录进行递归。这是重载方法之一。它允许您仅按文件名过滤。

答案 4 :(得分:1)

如果您使用的是.NET 2.0或更高版本(以及VB.Net),那么您可以使用 My.Computer.FileSystem.GetFiles Method。该方法有三个参数:

  • 目录
  • SearchType(枚举)
  • 通配符

SearchType enumeration有两个值,其中一个是 SearchAllSubDirectories 。因此,1方法返回匹配的所有文件(名称)的ReadOnly String Collection。

如果您使用的是C#,则可以使用DirectoryInfo.GetFiles Method。 DirectoryInfo.GetFiles只有2个参数:

  • 是searchPattern
  • SearchOption

如果您为SearchOption指定 AllDirectories ,您将获得类似的结果。

关键区别在于FileSystem.GetFiles返回为字符串集合,而DirectoryInfo.GetFiles返回FileInfo对象数组。