C# 递归地获取包含多个子目录的目录中的文件

C# 递归地获取包含多个子目录的目录中的文件,c#,C#,我想知道这里是否有人能帮我,因为我对C#还很陌生。我有一个包含文件夹的驱动器,其中文件夹中包含所有包含文件的文件夹。有没有一种方法可以递归地循环文件并将所有这些文件名收集到一个.txt文件中 我不知道如何在我的控制台应用程序中实现这一点——那么有人有任何代码可能会有所帮助吗?C#编程指南有一个遍历目录树的方法 File.WriteAllLines("yourfile.txt", Directory.GetFiles("path", "*.*", SearchOption.AllDirectori

我想知道这里是否有人能帮我,因为我对C#还很陌生。我有一个包含文件夹的驱动器,其中文件夹中包含所有包含文件的文件夹。有没有一种方法可以递归地循环文件并将所有这些文件名收集到一个.txt文件中

我不知道如何在我的控制台应用程序中实现这一点——那么有人有任何代码可能会有所帮助吗?

C#编程指南有一个遍历目录树的方法

File.WriteAllLines("yourfile.txt", Directory.GetFiles("path", "*.*", SearchOption.AllDirectories));
通常更有用,但如果您需要更“异步”的方法,即每次找到匹配的文件时都更新UI(或任何内容),那么本文中的方法可能会很有用。另一种方法是,你要么拥有所有的文件,要么没有。

C#Programming Guide有一个遍历目录树的方法


通常更有用,但如果您需要更“异步”的方法,即每次找到匹配的文件时都更新UI(或任何内容),那么本文中的方法可能会很有用。另一种方法是,你要么拥有所有的文件,要么不拥有所有的文件。

现在我知道你想提示用户找到每个文件,你可以尝试以下方法:

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();
            }
        }
    }
}
类程序
{
静态IEnumerable访问者(字符串根、字符串搜索模式)
{
foreach(Directory.GetFiles(root、searchPattern、SearchOption.TopDirectoryOnly)中的var文件)
{
生成返回文件;
}
foreach(Directory.GetDirectories(root)中的var文件夹)
{
foreach(访问者中的var文件(文件夹,搜索模式))
生成返回文件;
}
}
静态void Main(字符串[]参数)
{
foreach(访问者中的var文件(args[0],args[1]))
{
Write(“进程{0}?(Y/N)”,文件;
if(Console.ReadKey().Key==ConsoleKey.Y)
{
WriteLine(“{1}\t处理{0}…”,文件,Environment.NewLine);
}
其他的
{
Console.WriteLine();
}
}
}
}

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

现在我了解到您希望为找到的每个文件提示用户,您可能希望尝试以下内容:

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();
            }
        }
    }
}
类程序
{
静态IEnumerable访问者(字符串根、字符串搜索模式)
{
foreach(Directory.GetFiles(root、searchPattern、SearchOption.TopDirectoryOnly)中的var文件)
{
生成返回文件;
}
foreach(Directory.GetDirectories(root)中的var文件夹)
{
foreach(访问者中的var文件(文件夹,搜索模式))
生成返回文件;
}
}
静态void Main(字符串[]参数)
{
foreach(访问者中的var文件(args[0],args[1]))
{
Write(“进程{0}?(Y/N)”,文件;
if(Console.ReadKey().Key==ConsoleKey.Y)
{
WriteLine(“{1}\t处理{0}…”,文件,Environment.NewLine);
}
其他的
{
Console.WriteLine();
}
}
}
}

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

可能是这样的吗

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

别忘了使用System.IO

也许是这样的

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

别忘了使用System.IO

如果我使用这个,我怎么能输入提示。例如…我需要Console.Write(文件),以便运行此应用程序的用户可以看到文件名。然而,在我的应用程序继续做其他事情之前…我希望用户按下Y键继续。我该怎么做?我已经修改了我的答案,以满足您的需求。如果我使用这个,我该如何输入提示。例如…我需要Console.Write(文件),以便运行此应用程序的用户可以看到文件名。然而,在我的应用程序继续做其他事情之前…我希望用户按下Y键继续。我该怎么做?我已经修改了我的答案以满足你的需要。