문제

지정된 콘텐츠에 대해 주어진 위치에서 파일을 검색 할 필요가 있습니다. 이러한 파일은 웹 응용 프로그램을 통해 검색됩니다 (반드시 동일한 서버에있을 필요가 없음).

근처에서 업데이트해야합니다.

스캔 도구 / 코드를 찾아 본 후, 나는 이 답변을 기록합니다. 프로그래밍 방식으로 프로그래밍 방식으로 Windows의 Windows 검색 기능이 내장되어 있습니다.

아래 코드를 사용하면 (몇 가지 사소한 조정이있는 답변 코드가 많거나 적은 답변)이 작업을 성공적으로 만들 수있었습니다.

public class WindowsSearchScanner
{
    private const string Query = @"SELECT System.ItemName FROM SystemIndex WHERE scope ='file:{0}' and FREETEXT('{1}')";

    public void DoSearch(string criteria, string path)
    {
        string connectionString = "Provider=Search.CollatorDSO;Extended Properties=\"Application=Windows\"";
        using (OleDbConnection connection = new OleDbConnection(connectionString))
        {
            string query = string.Format(Query, path, criteria);
            OleDbCommand command = new OleDbCommand(query, connection);
            connection.Open();

            List<string> result = new List<string>();

            OleDbDataReader reader = command.ExecuteReader();
            int count = 0;
            while (reader.Read())
            {
                result.Add(reader.GetString(0));
                Console.WriteLine(reader.GetString(0));

                count++;
            }
            Console.WriteLine(count + " Records Found");

            connection.Close();
        }
    }
}
.

다음과 같은 몇 가지 질문이 있습니다.

  1. 은 문자열 쿼리를 사용하는 것 이상의 Windows 검색에 액세스하는 더 나은 (즉, 더 많은 .NET) 방식이 있습니까?
  2. 텍스트를 매개 변수화하는 방법이 있습니까? 명령에 OleDbParameters를 똑바로 똑바로 시도했지만 분명히 collatordso는 그것을 지원하지 않습니다. 분명히, SQL 주입과 마찬가지로 미리 데이터를 살균하지 않아도됩니다. 문제를 일으키는 잠재적 인 애비뉴를 놓칠 가능성이 있습니다.

    string query = @"SELECT System.ItemName FROM SystemIndex WHERE scope ='file:' + @path and FREETEXT(@text)";
    OleDbCommand command = new OleDbCommand(query, connection);
    
    command.Parameters.Add(new OleDbParameter("path", path));
    command.Parameters.Add(new OleDbParameter("text", criteria));
    
    connection.Open();
    
  3. 원격 기계에서 액세스 할 수 있습니까?

  4. 는 서버에 관련 소프트웨어가 설치되어 있지 않은 경우 에도이 작업을 수행 할 수 있습니다. 디렉토리에 Excel 파일이 포함되어 있으면 서버에 Office가 설치되어 있지 않아도 IT 색인이 있습니까?
도움이 되었습니까?

해결책

for 3), 4) SQL 및 AQS를 사용하는 MSDN 쿼리에 대한 접근 방식 1) 가져 오기 안전하지 않음을 통해 Windows 기능을 추가 할 수 있습니다. 2) 늙은 구식이지만 나는이 접근법에 대한 다른 옵션이 없다고 생각합니다

다른 팁

Old-School을 가서 ProcessSt / ProcessStartInfo에서 FindStr을 사용할 수 있습니다.

findstr (명령 줄 도구)는 서버에 내장되어 있으며 사용자가 가장하는 사용자가 액세스 할 수있는 위치에 액세스 할 수 있습니다.

나는 작은 단일 페이지 구현에서 이것을 시도했으며, 로컬 드라이브에서 UNC 경로에서 파일을 읽거나 스캔 할 수있었습니다.

이 옵션이 될 수 있습니다.출력은 텍스트입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top