【问题标题】:Searching NTFS directory .NET搜索 NTFS 目录 .NET
【发布时间】:2009-03-07 00:08:44
【问题描述】:

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

目录是否必须被索引?

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

【问题讨论】:

    标签: .net search ntfs


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      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 表示“创建时间”,attributes 指的是 NTFS 属性集,如 System、Hidden、Readonly、Archive 和 ContentIndexed (S、H、R、A、I)。

      只有当中间有空格时,文件名模式才需要单引号。

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

      【讨论】:

        【解决方案3】:

        您可以使用 windows 搜索 API this way,但我不太喜欢这种方式。

        如果你有时间自己索引目录,我推荐你试试Lucene.net,肯定比windows索引服务快。

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

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

            SearchType enumeration 有两个值,其中之一是 SearchAllSubDirectories。所以 1 方法返回所有匹配的文件(名称)的只读字符串集合。

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

            • 搜索模式
            • 搜索选项

            如果您为 SearchOption 指定 AllDirectories,您会得到类似的结果。

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-06-20
              • 1970-01-01
              • 2014-11-27
              • 1970-01-01
              • 2014-10-07
              • 1970-01-01
              • 2016-05-26
              • 1970-01-01
              相关资源
              最近更新 更多