我正在尝试编写一个WinForms应用程序,它允许搜索包含用文本框编写的字符串的文件(按WIN + F,你理解;)) 在这个应用程序中,有一个文件和目录列表,必须搜索此字符串
这些文件大多是.doc和.xls 我认为,在doc中搜索可能更容易,但在Excel文件中,单元格可以有不同的编码 我试图通过在Notepad ++中打开它们来“读取”这些文件,我发现只有拉丁字符的单元格很容易找到,但那些带有抛光字符的单元格有两个字节的编码
在搜索中构建的windows中,没有问题,它能够告诉我,在某些测试文件中有我的字符串包含波兰特殊字符所以我的问题基本上是,如果有一种方法可以为我的应用程序使用这个Windows内置搜索引擎(正如我写的,我只需要找到文件名),或者你可能有任何其他的想法,我怎么能写一个简单的多文件搜索?
答案 0 :(得分:0)
您可以在代码中与Windows搜索进行交互,从而可以大量搜索多种文件类型。有关更多信息,请参阅此MSDN文章:
http://msdn.microsoft.com/en-us/library/bb266517%28v=VS.85%29.aspx
答案 1 :(得分:0)
您可能想要使用Windows Search SDK。
答案 2 :(得分:0)
使用Windows Indexing APIs查看此网站。它指的是ASP.NET,但代码是在C#中。
以下代码段:
string QueryText = "asp alliance"; //The search string
string CatalogName = "searchcatalog"; //The name of your Index Server catalog
int NumberOfSearchResults = 0;
DataSet SearchResults = new DataSet();
//Prevent SQL injection attacks - further security measures are recommended
QueryText = QueryText.Replace("'", "''");
//Build the search query
string SQL = "SELECT doctitle, vpath, Path, Write, Size, Rank ";
SQL += "FROM \"" + CatalogName + "\"..SCOPE() ";
SQL += "WHERE";
SQL += " CONTAINS(Contents, '" + QueryText + "') ";
SQL += "AND NOT CONTAINS(Path, '\"_vti_\"') ";
SQL += "AND NOT CONTAINS(FileName, '\".ascx\" OR \".config\" OR \".css\"') ";
SQL += "ORDER BY Rank DESC";
//Connect to Index Server and perform search query
try
{
OleDbConnection IndexServerConnection = new OleDbConnection("Provider=msidxs;");
OleDbCommand dbCommand = new OleDbCommand(SQL, IndexServerConnection);
OleDbDataAdapter IndexServerDataAdapter = new OleDbDataAdapter();
IndexServerDataAdapter.SelectCommand = dbCommand;
IndexServerDataAdapter.Fill(SearchResults);
NumberOfSearchResults = SearchResults.Tables[0].Rows.Count;
}
catch (Exception ExceptionObject)
{
//Query failed so display an error message
NumberOfSearchResults = 0;
LabelNumberOfResults.Text = "Problem with retrieving search results due to: " + ExceptionObject.Message;
DataGridSearchResults.Visible = false;
}