Ricerca di file contenenti stringhe specificate in C#
-
29-10-2019 - |
Domanda
Sto cercando di scrivere un'app Winforms, che consente la ricerca di un file, che contenga una stringa scritta nella casella di testo (premi Win+F e capisci;) in questa app, c'è un elenco di file e directory, che deve essere Cercato per questa stringa
Quei file sono principalmente .doc e .xl, penso che la ricerca in DOC potrebbe essere più semplice, ma nei file di Excel, le celle possono avere codifiche diverse che ho provato a "leggere" quei file, aprendoli in blocco note ++ e ho trovato Quelle celle con solo caratteri latini erano facili da trovare, ma quelli con personaggi polacchi, avevano una codifica a due byte
In Windows integrato alla ricerca, non c'erano problemi, è stato in grado di dire che in alcuni file di test c'è la mia stringa che contiene caratteri speciali polacchi
Quindi la mia domanda in pratica è: se esiste un metodo per utilizzare questo motore di ricerca integrato per Windows per la mia app (come ho scritto, devo trovare solo file di file), o forse hai qualsiasi altra idea, come posso scrivere un semplice Ricerca multi-file?
Soluzione
Probabilmente vuoi usare il Windows Search SDK.
Altri suggerimenti
È possibile interagire con la ricerca di Windows nel codice, consentendole di eseguire la pesante sollevamento della ricerca di più tipi di file. Vedi questo articolo MSDN per ulteriori informazioni:
http://msdn.microsoft.com/en-us/library/bb266517%28v=vs.85%29.aspx
Dai un'occhiata a questo sito Web sull'utilizzo del API di indicizzazione di Windows. Si riferisce ad ASP.NET ma il codice è in C#.
Snippet di seguito:
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;
}