我正在开发一个应用程序,用户可以在本地计算机或网络上搜索文件或文件夹。我正在使用DirectoryInfo.GetDirecotories()
.
- 但我还想添加 Windows 7 用于搜索的功能,我相信使用索引。我还在 msdn 上看到了Windows Searching Service,但我不确定哪种方式最好:查询索引目录或使用搜索服务。有什么建议么?
- 我想知道是否有人可以在 C# 中给我一个搜索索引目录的小示例。
提前致谢!
我正在开发一个应用程序,用户可以在本地计算机或网络上搜索文件或文件夹。我正在使用DirectoryInfo.GetDirecotories()
.
提前致谢!
请参见以下示例:
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
。
您可以在本地或其他机器上搜索文件、文件夹、邮件和可能的其他媒体(取决于操作系统)。根据我的研究,不支持网络驱动器,因为它们无法被索引,但您可以连接到我认为在后台使用 RPC 的其他机器,这意味着您必须使用不同的 api(例如 System.网)。
请注意,要使所有这些工作,您的索引必须在目标机器上完全可操作(默认情况下)。该 api 对应于您在索引选项中指定的任何内容。这是有问题的屏幕:
System
可以在此处找到对象
的完整属性列表:属性系统参考。该对象包含诸如 URL、路径、名称、日期等内容。
可以在此处找到使用不同谓词(例如scope
和)的更多有趣示例: Windows Vista 搜索语法。还有一个粗略的 MSDN 文档:SCOPE and DIRECTORY Predicatesdirectory
我建议你查看文档,因为你可以用这个 api做很多事情。