C#で指定された文字列を含むファイルを検索する
-
29-10-2019 - |
質問
私はWinformsアプリを作成しようとしています。ファイルを検索することを可能にします。これには、テキストボックスに書かれた文字列(win+fを押します;あなたが理解しています;))このアプリには、ファイルとディレクトリのリストがあります。この文字列を検索しました
これらのファイルはほとんどが.docと.xlsです。ドキュメントでの検索は簡単かもしれないと思いますが、Excelファイルでは、セルがnotepad ++でそれらを開くことでそれらのファイルを「読み取ろうとした異なるエンコーディングを持つことができます。ラテン文字のみを持つセルは簡単に見つけることができましたが、ポーランド語の文字を持つ人は2バイトのエンコードを持っていました
検索に組み込まれているWindowsに問題はありませんでしたが、一部のテストファイルにはポーランドの特殊文字を含む私の文字列があることがわかりました。
だから私の質問は基本的に、私のアプリにこのWindows内蔵の検索エンジンを使用する方法がある場合(私が書いたように、私はファイル名のみを見つける必要があります)、あるいはあなたが他のアイデアを持っているかもしれません、私は単純なものを書く方法を持っていますマルチファイル検索?
解決
おそらく使用したいのです Windows検索SDK.
他のヒント
コードのWindows検索と対話することができ、複数のファイルタイプの検索を重視することができます。詳細については、このMSDNの記事を参照してください。
http://msdn.microsoft.com/en-us/library/bb266517%28v = vs.85%29.aspx
このWebサイトを使用してチェックしてください WindowsインデックスAPI. 。 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;
}