如何在 C# 中使用 Windows 搜索服务
How to use Windows Search Service in c#
我正在开发一个应用程序,用户可以在本地计算机或网络上搜索文件或文件夹。我正在使用 DirectoryInfo.GetDirecotories()
.
- 但我还想添加 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、路径、名称、日期等内容
可以在此处找到更多使用不同谓词(例如 scope
和 directory
)的有趣示例:Windows Vista Search Syntax. There is also a crude MSDN documentation: SCOPE and DIRECTORY Predicates
我建议你查看文档,因为你可以用这个 做很多 的事情 api。
我正在开发一个应用程序,用户可以在本地计算机或网络上搜索文件或文件夹。我正在使用 DirectoryInfo.GetDirecotories()
.
- 但我还想添加 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、路径、名称、日期等内容
可以在此处找到更多使用不同谓词(例如 scope
和 directory
)的有趣示例:Windows Vista Search Syntax. There is also a crude MSDN documentation: SCOPE and DIRECTORY Predicates
我建议你查看文档,因为你可以用这个 做很多 的事情 api。