我正在开发一个应用程序,用户可以在本地计算机或网络上搜索文件或文件夹。我正在使用DirectoryInfo.GetDirecotories()。
(a)但我也想添加Windows 7用于搜索的功能,我相信它使用索引。我还在msdn上看到了“ Windows Searching Service”,但是我不确定哪种方法最好,查询索引目录或使用搜索服务,有什么建议吗?(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的语法System
在其SystemIndex
表中搜索对象。您有4个示例查询,它们执行不同的操作。所有示例查询都将在c:\
文件夹中搜索Test
名称中包含的项目。
您可以在本地或其他计算机上搜索文件,文件夹邮件以及可能的其他介质(取决于OS)。根据我的研究,不支持网络驱动器,因为它们无法建立索引,但是您可以连接到其他计算机(假定在后台使用RPC),这意味着您必须使用其他api(例如System)提供网络凭据。净)。
请注意,要使这一切正常进行,索引必须在目标计算机上完全可用(默认情况下为)。api与您在“索引选项”中指定的内容相对应。这是有问题的屏幕:
System
可以在以下位置找到该对象的属性的完整列表:
属性系统参考。该对象包含URL,路径,名称,日期等内容。
可以在这里找到使用不同谓词(例如scope
和directory
)的更有趣的示例:Windows Vista搜索语法。还有一个粗略的MSDN文档:SCOPE和DIRECTORY谓词
我建议您查阅文档,因为您可以使用此api 做很多事情。