2013-02-01 2 views
0

파일을 검색하는 재귀 적 방법을 쓰고 일치하는 경우 콘솔 창에 전체 경로를 인쇄합니다. 분명히 이것이 많은 결과를 반환한다면 결과를 검토 할 적절한 시간을 제공하지 않고 화면을 빠르게 채울 것입니다. 콘솔의 CursorLeft 속성이 결과를 검토 할 수 있도록 ReadKey()을 삽입 할 특정 위치에 도달 할 때 잡는 방법이 필요합니다.Console.CursorTop이 위치에 도달 할 때 캐치

static void FileSearch(string Base, string Pattern) 
{ 
    if (!Directory.Exists(Base)) return; 

    string _Patt = Pattern.ToLower(); 

    var Files = Directory.GetFiles(Base).Where(File 
     => Path.GetFileName(File).ToLower().Contains(_Patt)); 

    foreach (string File in Files) 
     Console.WriteLine(File); 

    string[] Dirs = Directory.GetDirectories(Base); 

    foreach (string Dir in Dirs) 
     FileSearch(Dir, Pattern); 
} 
내가 위치를 추적 루프가 반복 될 때마다 그것을 확인하기 위해, 증가하는 int처럼, 인덱서의 어떤 종류를 추가 할 수 있다는 것을 알고 있어요

int을 것을 다음과 같이 내 검색 방법은 ref으로 전달하여 모든 통화가 동일하게 보일 수 있습니다. int. 또한 각 반복마다 현재 위치를 간단히 확인할 수 있음을 알고 있습니다. 이 작업을 수행하는 더 깨끗한 방법이 있을지 궁금해하고 있습니다. 아마도 이벤트 처리와 유사할까요?

+0

그것은 나에게 작은 소리. 왜 그냥/p (페이지 용) 옵션을주고 모든 Console.WindowHeight 라인과 프롬프트에 대해 멈추지 않을까요? 아니면 그냥 모든 것을 출력하고 그녀가 필요하다면 사용자 파이프를 "more"로 보냅니 까? –

+0

정적'int'는 충분하지 않습니까? 그것은 구현하는 것이 사소한 것입니다. –

+0

이것은 실제로 내가하고있는 일의 버려진 버전입니다. 이것은 정규 표현식을 사용한 검색과 같은 고급 검색 기능을 제공하기 위해 클래스 라이브러리의 일부로 구현됩니다. 내 목표는 검색 방법 자체를 가능한 짧게 유지하기 위해 재귀 적 메서드 내에서 위치를 검사 할 필요성을 제거하는 것입니다. 그러나 나는 이것을 분석하고 어떤 문체 개선보다 더 많은 두통을 피할 수 있다는 것에 동의하기 시작했습니다. –

답변

1

나는 Console.CursorTop이 (가) 볼만한 속성이라고 생각합니다. 각 행을 인쇄 한 후 다음을 확인합니다 :

if (Console.CursorTop % (Console.WindowHeight - 1) == 0) 
    Console.ReadKey(); 

같이 : 당신이 오버 엔지니어링 것 같은

static void FileSearch(string Base, string Pattern) 
{ 
    if (!Directory.Exists(Base)) return; 

    string _Patt = Pattern.ToLower(); 

    var Files = Directory.GetFiles(Base).Where(File 
     => Path.GetFileName(File).ToLower().Contains(_Patt)); 

    foreach (string File in Files) 
    { 
     Console.WriteLine(File); 
     if (Console.CursorTop % (Console.WindowHeight - 1) == 0) 
      Console.ReadKey(); 
    } 

    string[] Dirs = Directory.GetDirectories(Base); 

    foreach (string Dir in Dirs) 
     FileSearch(Dir, Pattern); 
} 
+0

이것은 실제로 내가 피하려고했던 것입니다.하지만 제가 가치가있는 것보다 더 어렵게 만들 수 있다는 지적이 있었으며, 당신의 대답은 이전에 생각하지 못했던 방식으로 실제로 검사하고 있습니다. 요점 나는 이것이 최고의 답이라고 생각합니다. –

관련 문제