我想知道这里是否有人可以帮助我,因为我还是C#的新手。我有一个文件夹w /在文件夹中的文件夹,所有文件夹都包含文件。有没有办法递归循环文件并将所有这些文件名收集到.txt文件中?
我不确定如何在我的控制台应用中实现这一点 - 所有人都有任何可能有用的代码吗?
答案 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