Поиск файлов, содержащих указанные строки в C # - PullRequest
0 голосов
/ 23 марта 2011

Я пытаюсь написать приложение WinForms, которое позволяет искать файлы, содержащие строку, написанную в текстовом поле (нажмите WIN + F, и вы понимаете;)), в этом приложении есть список файлов и каталогов,нужно искать эту строку

эти файлы в основном .doc и .xls. Я думаю, что поиск в doc может быть проще, но в файлах Excel, ячейки могут иметь разные кодировки, которые я пытался «прочитать».«Эти файлы, открыв их в Notepad ++, и я обнаружил, что ячейки с только латинскими символами было легко найти, но ячейки с польскими символами имели двухбайтовую кодировку

в окнах, встроенных в поиск, не былопроблема, я мог сказать, что в некоторых тестовых файлах есть моя строка, которая содержит польские специальные символы

, поэтому мой вопрос в основном таков: есть ли способ использовать эту встроенную поисковую систему Windows для моегоприложение (как я уже писал, мне нужно найти только имена файлов), или, может быть, у вас есть другая идея, как я могу написать простой поиск нескольких файлов?

Ответы [ 3 ]

0 голосов
/ 23 марта 2011

Возможно, вы хотите использовать Windows Search SDK .

0 голосов
/ 23 марта 2011

Посетите этот веб-сайт, используя API индексации Windows . Это относится к 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;  

            }  
0 голосов
/ 23 марта 2011

Вы можете взаимодействовать с поиском Windows в вашем коде, что позволяет выполнять тяжелую работу по поиску файлов разных типов. См. Эту статью MSDN для получения дополнительной информации:

http://msdn.microsoft.com/en-us/library/bb266517%28v=VS.85%29.aspx

...