2010-06-09 2 views
1

저는 C#을 처음 접했을 때 다른 사람이 저를 도울 수 있는지 궁금합니다. 폴더가있는 드라이브가 있는데, 파일이 들어있는 폴더에 있습니다. 재귀 적으로 파일을 반복하고 이러한 파일 이름을 모두 .txt 파일로 모으는 방법이 있습니까?여러 하위 디렉토리가있는 디렉토리에서 파일을 반복적으로 가져 오기

내 콘솔 앱에이를 구현하는 방법을 잘 모르겠습니다. 누구에게 도움이되는 코드가 있습니까?

답변

3

, 당신은이 라인을 따라 뭔가를 시도 할 수 있습니다 :

각 경기, 프롬프트, 디렉토리 구조를 걸을 것이다
class Program 
{ 
    static IEnumerable<String> Visitor(String root, String searchPattern) 
    { 
     foreach (var file in Directory.GetFiles(root, searchPattern, SearchOption.TopDirectoryOnly)) 
     { 
      yield return file; 
     } 

     foreach (var folder in Directory.GetDirectories(root)) 
     { 
      foreach (var file in Visitor(folder, searchPattern)) 
       yield return file; 
     } 
    } 

    static void Main(string[] args) 
    { 
     foreach (var file in Visitor(args[0], args[1])) 
     { 
      Console.Write("Process {0}? (Y/N) ", file); 

      if (Console.ReadKey().Key == ConsoleKey.Y) 
      { 
       Console.WriteLine("{1}\tProcessing {0}...", file, Environment.NewLine); 
      } 
      else 
      { 
       Console.WriteLine(); 
      } 
     } 
    } 
} 

사용자가 파일을 처리할지 여부를 지정합니다.

+0

를 사용하는 것을 잊지 마십시오. 예를 들어 ... 나는이 응용 프로그램을 실행하는 사용자가 파일 이름을 볼 수 있도록 Console.Write (파일)을 원한다. 그러나 내 앱이 다른 일을하기 전에 계속 ... 사용자가 Y를 눌러 계속 진행하기를 원합니다. 어떻게해야합니까? – yeahumok

+0

귀하의 필요를 해결하기 위해 제 답변을 수정했습니다. –

9
File.WriteAllLines("yourfile.txt", Directory.GetFiles("path", "*.*", SearchOption.AllDirectories)); 
3

C# 프로그래밍 가이드에는 이 있으며 디렉토리 트리를 탐색합니다.

@Koen's answer은 일반적으로 더 유용하지만이 문서의 접근 방식은 일치하는 파일을 찾을 때마다 UI (또는 기타)를 업데이트하는 "비동기"접근 방식이 필요한 경우 유용 할 수 있습니다. 다른 방법을 사용하면 모든 파일을 가지고 있거나 그렇지 않습니다. 지금은 당신이 찾은 각 파일에 대한 사용자에게 메시지를 표시 할 것인지 이해

3

어쩌면 이렇게 할 수 있을까요?

 var files = Directory.GetFiles("c:\\", "*.*", SearchOption.AllDirectories); 
     using (var sw = new StreamWriter("output.txt")) 
     { 
      files.ToList().ForEach(file => sw.WriteLine(file)); 
     } 

내가 이것을 사용하면 내가 프롬프트에 넣어 수있는 방법, System.IO

관련 문제