Recherche de fichiers contenant des chaînes spécifiées en C #
-
29-10-2019 - |
Question
J'essaie d'écrire une application WinForms, qui permet de rechercher un fichier, qui contient une chaîne écrite dans TextBox (appuyez recherché cette chaîne
Ces fichiers sont principalement .doc et .xls Je pense que la recherche dans DOC peut être plus facile, mais dans les fichiers Excel, les cellules peuvent avoir des codages différents que j'ai essayé de "lire" ces fichiers, en les ouvrant dans Notepad ++, et j'ai trouvé que les cellules avec seulement des caractères latins étaient faciles à trouver, mais ceux avec des caractères polonais avaient un codage de deux octets
Dans Windows Construit In Search, il n'y avait aucun problème, il a pu dire que dans certains fichiers de test, il y a ma chaîne qui contient des caractères spéciaux polonais
Donc, ma question est essentiellement, s'il existe une méthode pour utiliser ce moteur de recherche intégré Windows pour mon application (comme je l'ai écrit, je dois trouver uniquement des noms de fichiers), ou peut-être que vous avez une autre idée, comment je peux écrire un simple Recherche multi-fichiers?
La solution
Vous voulez probablement utiliser le SDK de recherche Windows.
Autres conseils
Vous pouvez interagir avec la recherche Windows dans votre code, ce qui lui permet de faire le levage de la recherche de plusieurs types de fichiers. Voir cet article MSDN pour plus d'informations:
http://msdn.microsoft.com/en-us/library/bb266517%28v=vs.85%29.aspx
Consultez ce site Web sur l'utilisation du API d'indexation Windows. Il fait référence à asp.net mais le code est en C #.
Extrait ci-dessous:
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;
}