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

目录必须建立索引吗?

是否有可用于查询目录的 .NET 可访问 Windows 搜索 API?

有帮助吗?

解决方案

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

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

其他提示

是一个名为 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)。

仅当存在中间空格时,文件名模式周围才需要单引号。

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

你可以使用windows搜索API 这种方式,但我不知道非常喜欢这样。

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

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

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

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

  • 目录
  • 搜索类型(枚举)
  • 通配符

搜索类型枚举 有两个值,其中之一是 搜索所有子目录. 。因此,第一种方法返回所有匹配的文件(名称)的只读字符串集合。

如果您使用 C# 那么您可以使用 DirectoryInfo.GetFiles 方法 。DirectoryInfo.GetFiles 只有 2 个参数:

  • 搜索模式
  • 搜索选项

如果您指定 所有目录 对于 SearchOption 你会得到类似的结果。

主要区别在于 FileSystem.GetFiles 以字符串集合的形式返回,而 DirectoryInfo.GetFiles 返回 FileInfo 对象的数组。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top