Как я могу выполнить поиск по файлам, таким как запросы к платформе Windows Search, используя .net-core? - PullRequest
0 голосов
/ 08 октября 2018

Мне нужно искать файлы по имени файла и содержимому.Текущая реализация использует подключение Ole DB к поиску Windows.Но, как я понимаю, Ole db не будет реализован в ядре .net.Я думаю, что я должен использовать решение, подобное Lucene . Так что мне нужен совет, как получить доступ к поиску Windows, по крайней мере, из .net-core, или любые идеи, как сделать это кроссплатформенным способом без поиска Windows.

1 Ответ

0 голосов
/ 10 октября 2018

У вас есть пара вариантов.Вы можете воспользоваться инструментом FTQuery (FTQuery.exe) в Windows 7 SDK и использовать класс процесса в System.Diagnostics для получения результатов путем анализа стандартного вывода.

В качестве альтернативы вы можете создать отдельный веб-API ASP.NET.2 проект в качестве моста между Windows Search и .NET Core, используя следующий код в качестве действия в вашем контроллере.

public async Task<IHttpActionResult> Post()
{
    var data = new ArrayList();

    var conn = new OleDbConnection("Provider=Search.CollatorDSO;Extended Properties='Application=Windows'");
    await conn.OpenAsync();

    string sql = await Request.Content.ReadAsStringAsync();
    var cmd = new OleDbCommand(sql, conn);

    using (var rdr = await cmd.ExecuteReaderAsync(CommandBehavior.CloseConnection))
    {
        while (await rdr.ReadAsync())
        {
            var row = new Dictionary<string, object>();
            for (int i = 0; i < rdr.FieldCount; i++)
            {
                if (!rdr.IsDBNull(i))
                    row.Add(rdr.GetName(i), rdr.GetValue(i));
            }
            data.Add(row);
        }
    }

    return Json(data);
}
...