如何在c#中使用Windows搜索服务

我正在处理一个应用程序,用户可以在本地计算机或网络上搜索文件或文件夹。 我正在使用DirectoryInfo.GetDirecotories()。

(a)但我还想添加Windows 7用于搜索的function,我相信它使用索引。 我还在msdn上看过“Windows搜索服务”,但我不确定哪种方式最好,查询索引目录或使用搜索服务,有什么建议吗? (b)我想知道是否有人可以在C#中给我一个搜索索引目录的小例子。

提前致谢。

见下面的例子:

static void Main(string[] args) { var connection = new OleDbConnection(@"Provider=Search.CollatorDSO;Extended Properties=""Application=Windows"""); // File name search (case insensitive), also searches sub directories var query1 = @"SELECT System.ItemName FROM SystemIndex " + @"WHERE scope ='file:C:/' AND System.ItemName LIKE '%Test%'"; // File name search (case insensitive), does not search sub directories var query2 = @"SELECT System.ItemName FROM SystemIndex " + @"WHERE directory = 'file:C:/' AND System.ItemName LIKE '%Test%' "; // Folder name search (case insensitive) var query3 = @"SELECT System.ItemName FROM SystemIndex " + @"WHERE scope = 'file:C:/' AND System.ItemType = 'Directory' AND System.Itemname LIKE '%Test%' "; // Folder name search (case insensitive), does not search sub directories var query4 = @"SELECT System.ItemName FROM SystemIndex " + @"WHERE directory = 'file:C:/' AND System.ItemType = 'Directory' AND System.Itemname LIKE '%Test%' "; connection.Open(); var command = new OleDbCommand(query4, connection); using (var r = command.ExecuteReader()) { while (r.Read()) { Console.WriteLine(r[0]); } } connection.Close(); Console.ReadKey(); } 

它使用OLE DB api连接到索引器服务,并使用类似SQL的语法在其SystemIndex表中搜索System对象。 您有4个示例查询,它们执行不同的操作。 所有示例查询都将在c:\文件夹中搜索名称中包含Test项目。

您可以在本地或其他计算机上搜索文件,文件夹邮件以及可能的其他媒体(取决于操作系统)。 根据我的研究,不支持网络驱动器,因为它们无法编入索引,但您可以连接到其他我认为在后台使用RPC的机器,这意味着您必须使用不同的api(例如System)提供网络凭据。净)。

请注意,要使其中的任何一个工作,您的索引必须在目标计算机上完全可操作( 默认情况下 )。 api对应于您在索引选项中指定的任何内容。 这是有问题的屏幕:

索引选项

可以在此处找到System对象的完整属性列表: Property System Reference 。 此对象包含URL,路径,名称,日期等内容。

可以在此处找到使用不同谓词(例如scopedirectory )的更有趣的示例: Windows Vista搜索语法 。 还有一个原始的MSDN文档: SCOPE和DIRECTORY Predicates

我建议您查看文档,因为您可以使用此API执行大量操作