2010-06-09 4 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# имеет article detailing both a recursive and an iterative approach, чтобы пройти через дерево каталогов.

@Koen's answer полезен в целом, но подходы в этой статье могут быть полезны, если вам нужен более «асинхронный» подход, при котором каждый раз, когда вы находите соответствующий файл, вы обновляете пользовательский интерфейс (или что-то еще). С другим подходом у вас либо есть все файлы, либо нет.

3

Что-то вроде этого, может быть?

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

Не забудьте Использование System.IO

Смежные вопросы