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

How to use Windows Search Service in c#

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

  1. 但我还想添加 windows 7 用于搜索的功能,我相信它使用索引。我还在 msdn 上看到 Windows Searching Service,但我不确定哪种方式最好:查询索引目录或使用搜索服务。有什么建议吗?

提供一个在 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 [=48= 中搜索 System 个对象].您有 4 个示例查询,它们执行不同的操作。所有示例查询都将在 c:\ 文件夹中搜索名称中包含 Test 的项目。

您可以在本地或其他机器上搜索文件、文件夹、邮件和可能的其他媒体(取决于 OS)。根据我的研究,网络驱动器不受支持,因为它们无法被索引,但您可以连接到我假设在后台使用 RPC 的其他机器,这意味着您必须使用不同的 api 提供网络凭据(例如 System.Net)。

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

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

可以在此处找到更多使用不同谓词(例如 scopedirectory)的有趣示例:Windows Vista Search Syntax. There is also a crude MSDN documentation: SCOPE and DIRECTORY Predicates

我建议你查看文档,因为你可以用这个 做很多 的事情 api。