2011-03-23 151 views
0

我试图编写一个WinForms应用程序,它允许搜索包含在文本框中编写的字符串的文件(按下WIN + F并且您明白;)) 在此应用程序中,有一个文件和目录列表,必须搜索此字符串在C#中搜索包含指定字符串的文件

这些文件大多是.doc和.xls 我认为,在文档搜索可能会更容易,但在Excel文件中,单元格可以有不同编码 我试图通过在Notepad ++中打开它们来“读取”这些文件,并且我发现只有拉丁字符的单元格很容易找到,但是那些具有波兰语字符的单元格有两个字节的编码

在内置的搜索窗口,没有什么问题,它能够告诉,在一些测试文件有我的字符串包含抛光特殊字符

所以我的问题主要是,如果有一种方法使用这个窗口内置的搜索引擎为我的应用程序(如我写的,我需要找到唯一的文件名),或者你有任何其他的想法,我怎么可以写一个简单的多文件搜索?

回答

0

你可能想使用Windows Search SDK

+0

我决定用这种方法 – 2011-03-25 14:56:52

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; 

      } 
相关问题