递归地获取具有多个子目录的目录中的文件

时间:2010-06-09 17:06:39

标签: c#

我想知道这里是否有人可以帮助我,因为我还是C#的新手。我有一个文件夹w /在文件夹中的文件夹,所有文件夹都包含文件。有没有办法递归循环文件并将所有这些文件名收集到.txt文件中?

我不确定如何在我的控制台应用中实现这一点 - 所有人都有任何可能有用的代码吗?

4 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:4)

既然我知道你想提醒用户找到每个文件,你可能想尝试这些方面:

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();
            }
        }
    }
}

这将遍历目录结构,并且对于每个匹配,提示用户是否处理该文件。

答案 2 :(得分:3)

C#编程指南有一个article detailing both a recursive and an iterative approach来遍历目录树。

@Koen's answer在一般情况下更有用,但是如果您需要更“异步”的方法,那么在每次找到匹配文件时更新UI(或其他)时,该文章中的方法都会很有用。使用其他方法,您可以拥有所有文件,也可以不拥有。

答案 3 :(得分:3)

这样的事可能吗?

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

不要忘记使用System.IO