我正在开发一个应用程序,用户可以在本地计算机或网络上搜索文件或文件夹。我正在使用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
名称中包含的项目。
您可以在本地或其他计算机上搜索文件,文件夹邮件以及可能的其他介质(取决于OS)。根据我的研究,不支持网络驱动器,因为它们无法建立索引,但是您可以连接到其他计算机(假定在后台使用RPC),这意味着您必须使用其他api(例如System)提供网络凭据。净)。
请注意,要使这一切正常进行,您的索引必须在目标计算机上完全可用(默认情况下为)。api与您在“索引选项”中指定的内容相对应。这是有问题的屏幕:
System
可以在以下位置找到该对象的属性的完整列表:属性系统参考。该对象包含URL,路径,名称,日期等。
可以在这里找到使用不同谓词(例如scope
和directory
)的更有趣的示例:Windows Vista搜索语法。还有一个粗略的MSDN文档:SCOPE和DIRECTORY谓词
我建议您查阅文档,因为您可以使用此api做很多事情。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句