gpt4 book ai didi

c# - Windows 搜索 - 有更好的方法吗?

转载 作者:太空狗 更新时间:2023-10-29 17:58:13 25 4
gpt4 key购买 nike

我需要在给定位置的文件中搜索指定内容。这些文件将通过网络应用程序(不一定在同一台服务器上)进行搜索,并且应该近乎实时地更新。

在四处寻找扫描工具/代码后,我偶然发现了 this表明您可以编程方式连接到 Windows 的内置 Windows 搜索功能的答案。

使用下面的代码(或多或少的答案代码进行了一些小的调整),我已经能够在我的机器上成功地完成这项工作:

public class WindowsSearchScanner
{
private const string Query = @"SELECT System.ItemName FROM SystemIndex WHERE scope ='file:{0}' and FREETEXT('{1}')";

public void DoSearch(string criteria, string path)
{
string connectionString = "Provider=Search.CollatorDSO;Extended Properties=\"Application=Windows\"";
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
string query = string.Format(Query, path, criteria);
OleDbCommand command = new OleDbCommand(query, connection);
connection.Open();

List<string> result = new List<string>();

OleDbDataReader reader = command.ExecuteReader();
int count = 0;
while (reader.Read())
{
result.Add(reader.GetString(0));
Console.WriteLine(reader.GetString(0));

count++;
}
Console.WriteLine(count + " Records Found");

connection.Close();
}
}
}

我对此有几个疑问:

  1. 除了使用字符串查询之外,是否有更好(即更多 .Net)访问 Windows 搜索的方式?
  2. 有没有办法参数化文本?我尝试直接将 OleDbParameters 添加到命令中,但显然 Collat​​orDSO 不支持它。显然,我宁愿不必事先清理数据 - 就像 SQL 注入(inject)一样,我很可能会错过一些可能导致问题的潜在途径

    string query = @"SELECT System.ItemName FROM SystemIndex WHERE scope ='file:' + @path and FREETEXT(@text)";
    OleDbCommand command = new OleDbCommand(query, connection);

    command.Parameters.Add(new OleDbParameter("path", path));
    command.Parameters.Add(new OleDbParameter("text", criteria));

    connection.Open();
  3. 可以从远程机器访问吗?

  4. 即使服务器没有安装相关软件,它也能工作吗?也就是说,如果目录包含一个 excel 文件,即使服务器没有安装 office,它也会索引吗?

最佳答案

对于 3) ,4) msdn Using SQL and AQS Approaches to Query the Index对于 1),您可以尝试通过 import unsafe 添加 windows 功能。对于 2) 看起来很老套,但我想这种方法没有其他选择

关于c# - Windows 搜索 - 有更好的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25002437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com