当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在C#中使用Windows搜索服务》经验,为你挑选了1个好方法。

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

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

提前致谢。



1> bokibeg..:

请参见以下示例:

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,路径,名称,日期等内容。

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

我建议您查阅文档,因为您可以使用此api 做很多事情。

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有