【问题标题】:Searching for files containing specified strings in C#在 C# 中搜索包含指定字符串的文件
【发布时间】:2011-03-23 19:21:01
【问题描述】:

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

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

在windows内置的搜索中,没有问题,可以看出,在一些测试文件中有我的字符串包含波兰特殊字符

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

【问题讨论】:

    标签: c# windows-search file-search


    【解决方案1】:

    您可能想使用Windows Search SDK

    【讨论】:

      【解决方案2】:

      您可以在代码中与 Windows 搜索进行交互,使其能够完成搜索多种文件类型的繁重工作。有关详细信息,请参阅此 MSDN 文章:

      http://msdn.microsoft.com/en-us/library/bb266517%28v=VS.85%29.aspx

      【讨论】:

        【解决方案3】:

        查看此网站以使用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;  
        
                    }  
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-11-18
          • 1970-01-01
          • 1970-01-01
          • 2016-07-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-05
          相关资源
          最近更新 更多