0

テキストボックスに書かれた文字列を含むファイルを検索できるWinFormsアプリを作成しようとしています(WIN + Fを押すとわかります;))このアプリには、ファイルとディレクトリのリストがあります。この文字列を検索しました

これらのファイルは主に.docと.xlsであり、docでの検索の方が簡単かもしれませんが、Excelファイルでは、Notepad ++で開くことにより、これらのファイルを「読み取る」ことを試みたセルのエンコーディングが異なる可能性があります。ラテン文字のみのセルは簡単に見つけることができましたが、ポーランド語の文字を含むセルは2バイトのエンコーディングでした。

検索機能が組み込まれたWindowsでは、問題はありませんでした。一部のテストファイルには、ポーランド語の特殊文字を含む文字列が含まれていることがわかりました。

だから私の質問は基本的に、私のアプリにこのWindows組み込みの検索エンジンを使用する方法がある場合(私が書いたように、ファイル名だけを見つける必要があります)、または他のアイデアがある場合は、簡単な方法を書くことができます複数ファイル検索?

4

3 に答える 3

0

おそらく、WindowsSearchSDKを使用することをお勧めします

于 2011-03-23T19:26:56.190 に答える
0

WindowsインデックスAPIの使用については、このWebサイトを確認してください。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;  

            }  
于 2011-03-23T19:28:45.480 に答える
0

コード内でウィンドウサーチを操作できるため、複数のファイルタイプを検索するという手間のかかる作業を行うことができます。詳細については、次のMSDNの記事を参照してください。

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

于 2011-03-23T19:26:30.490 に答える