2010-06-09 88 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或Y来继续。我该怎么做呢? – yeahumok 2010-06-09 17:51:14

+0

我已经修改了我的答案以满足您的需求。 – 2010-06-10 14:13:33

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

也许这样的事情?

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

不要忘了使用System.IO

相关问题