Buscando archivos que contienen cadenas especificadas en C#
-
29-10-2019 - |
Pregunta
Estoy tratando de escribir una aplicación WinForms, que permita la búsqueda de archivos, que contengan una cadena escrita en el cuadro de texto (presione Win+F y comprenda;)) En esta aplicación, hay una lista de archivos y directorios, que debe ser Busqué esta cadena
Esos archivos son en su mayoría .doc y .xls, creo, que buscar en DOC puede ser más fácil, pero en los archivos de Excel, las celdas pueden tener diferentes codificaciones que he intentado "leer" esos archivos, abriéndolos en Notepad ++, y encontré que las celdas con solo caracteres latinos eran fáciles de encontrar, pero aquellas con caracteres polacos tenían una codificación de dos bytes
En Windows incorporados en la búsqueda, no había problema, pudo decir que en algunos archivos de prueba hay mi cadena que contiene caracteres especiales polacos
Entonces, mi pregunta básicamente es que si hay un método para usar este motor de búsqueda incorporado de Windows para mi aplicación (como escribí, necesito encontrar solo nombres de archivo), o tal vez tenga otra idea, cómo puedo escribir una simple ¿Búsqueda de múltiples archivos?
Solución
Probablemente quieras usar el Search SDK de Windows.
Otros consejos
Puede interactuar con la búsqueda de Windows en su código, lo que le permite hacer el trabajo pesado de buscar múltiples tipos de archivos. Consulte este artículo de MSDN para obtener más información:
http://msdn.microsoft.com/en-us/library/bb266517%28v=vs.85%29.aspx
Consulte este sitio web sobre el uso del API de indexación de Windows. Se refiere a ASP.NET pero el código está en C#.
Fragmento a continuación:
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;
}