[英]How to use Windows Search Service in 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 的語法在其SystemIndex
表中搜索System
對象。 您有 4 個執行不同操作的示例查詢。 所有示例查詢都將在c:\\
文件夾中搜索名稱中包含Test
項目。
您可以在本地或其他機器上搜索文件、文件夾郵件和可能的其他媒體(取決於操作系統)。 從我研究的內容來看,不支持網絡驅動器,因為它們無法被索引,但您可以連接到我假設在后台使用 RPC 的其他機器,這意味着您必須使用不同的 api(例如 System.網)。
請注意,要使其中的任何一項工作,您的索引必須在目標機器上完全可操作(默認情況下)。 api 對應於您在索引選項中指定的任何內容。 這是有問題的屏幕:
可以在此處找到System
object 的完整屬性列表: Property System Reference 。 該對象包含諸如 URL、路徑、名稱、日期等內容。
可以在此處找到使用不同謂詞(例如scope
和directory
)的更多有趣示例: Windows Vista 搜索語法。 還有一個粗略的 MSDN 文檔: SCOPE and DIRECTORY Predicates
我建議你查看文檔,因為你可以用這個 api 做很多事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.