题
我有一个要求,搜索文件在某一地点为指定的内容。这些文件将被搜查,通过一个网上应用程序(其可以不必在同一服务器),应该更新在近实时。
之后的寻找扫描工具/代码,我击中后, 此 答案表明,你可以编程方式挂钩的建于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();
}
}
}
我有几个问题:
- 是有一个 更好的 (即更多。Net)的方式访问的窗户搜索,超出使用的字符串查询?
有没有一种方式进行参数设置的文本?我试图直接加入
OleDbParameters
该命令,但显然CollatorDSO不支持它。显然,我宁愿没有消毒的数据事先样SQL注,它有可能我会错过一些潜在的途径,将引起的问题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();
这可以访问从远程机器?
- 将这项工作,甚至如果服务器没有相关的软件安装--即如果目录中包含一个excel文件,将它的索引,甚至如果服务器没有办公室安装?
解决方案
3),4) msdn使用SQL和质量系统的办法来查询的索引 1)你可以尝试增加窗口的功能通过进口不安全。2)看起来奇怪的老式的但我想没有其他选择,对于这种方法
其他提示
你可以去古老的学校,并使用FindStr在一个流程/ProcessStartInfo.
Findstr(a命令行工具)是建立在你的服务器和能够访问的任何位置,这些用户,你是模仿已经访问。
我试过这个了在一个小的单页面执行,我能够读/扫描文件关于我的地方驱动以及国军司令部的路径。
这可能是一个选择。输出的文本。
不隶属于 StackOverflow