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?

È stato utile?

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;  

            }  
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top