每次如何将f附加到列表中,然后将列表写入文本文件?我尝试使用以下代码,但文本文件始终为空?
static void DirSearch(string dir, string pattern)
{
try
{
List<String> filesList = new List<string>();
foreach (string f in Directory.GetFiles(dir, pattern))
//Console.WriteLine(f);
{
// Console.WriteLine(f); // // <- This works correctly
filesList.Add(f);
}
foreach (string d in Directory.GetDirectories(dir))
{
//Console.WriteLine(d);
DirSearch(d, pattern);
}
File.WriteAllLines("files.txt", filesList.ToArray());
}
catch (System.Exception ex)
{
//Console.WriteLine(ex.Message);
}
}
答案 0 :(得分:3)
我怀疑问题是每次调用DirSearch
时,你都会覆盖以前调用的文件输出。如果最终调用没有文件(只有目录),那么最终会得到一个空文件。
选项:
Directory.GetFiles(dir, pattern, SearchOption.AllDirectories
,因此您根本不需要使用递归。File.AppendAllLines
代替File.WriteAllLines
File.WriteAllLines
。后一种方法看起来像这样:
public static DirSearch(string dir, string pattern)
{
List<string> files = new List<string>();
DirSearchImpl(dir, pattern, files);
File.WriteAllLines("files.txt", files);
}
private static DirSearchImpl(string dir, string pattern, List<string> files)
{
// Simpler than your previous loop...
files.AddRange(Directory.GetFiles(dir, pattern));
foreach (var subdirectory in Directory.GetDirectories(dir))
{
DirSearchImpl(subdirectory, pattern, files);
}
}
我还建议更改你的异常处理 - 捕捉Exception
很少是一个好主意,如果事情失败,我不确定你真的想继续前进,是吗?