C# 在C中搜索包含指定字符串的文件#

C# 在C中搜索包含指定字符串的文件#,c#,windows-search,file-search,C#,Windows Search,File Search,我正在尝试编写一个WinForms应用程序,它允许搜索包含文本框中写入的字符串的文件(按WIN+F,您就会明白;) 在此应用程序中,有一个文件和目录列表,必须搜索该字符串 这些文件主要是.doc和.xls 我认为,在文档中搜索可能更容易,但在Excel文件中,单元格可以有不同的编码 我曾试图通过在记事本++中打开这些文件来“读取”这些文件,我发现只有拉丁字符的单元格很容易找到,但是那些有波兰字符的单元格有两个字节的编码 在windows内置搜索中,它可以判断出,在一些测试文件中,有一个包含波兰特

我正在尝试编写一个WinForms应用程序,它允许搜索包含文本框中写入的字符串的文件(按WIN+F,您就会明白;) 在此应用程序中,有一个文件和目录列表,必须搜索该字符串

这些文件主要是.doc和.xls 我认为,在文档中搜索可能更容易,但在Excel文件中,单元格可以有不同的编码 我曾试图通过在记事本++中打开这些文件来“读取”这些文件,我发现只有拉丁字符的单元格很容易找到,但是那些有波兰字符的单元格有两个字节的编码

在windows内置搜索中,它可以判断出,在一些测试文件中,有一个包含波兰特殊字符的my字符串


所以我的问题基本上是,如果有一种方法可以在我的应用程序中使用这个windows内置搜索引擎(正如我写的,我只需要查找文件名),或者你有任何其他想法,我如何编写一个简单的多文件搜索?

你可以在代码中与windows search交互,允许它执行搜索多种文件类型的繁重任务。有关更多信息,请参阅本MSDN文章:


您可能想使用。

在使用上查看此网站。它引用了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;  

            }