目录列表递归
本文关键字:递归 列表 | 更新日期: 2023-09-27 18:15:39
当试图在递归方法中将一个列表连接到另一个列表时,我遇到了一个问题。我可以在每次递归时打印出List的每个成员,但是当我试图将它添加到另一个主List时,它似乎出现了问题。
我得到的错误是:Null对象引用错误。
我这样做的主要动机是递归地创建给定文件夹/路径中所有目录和子目录的列表。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace listsubdirsinfile
{
class Program
{
public static DirectoryInfo directory;
public static List<DirectoryInfo> allSubDirectories;
public static FileInfo[] files;
static void Main(string[] args)
{
directory = new DirectoryInfo(@"C:'cs'");
allSubDirectories = getAllSubdirectories(directory);
Console.WriteLine("allSubdirectories'n-----------------");
foreach (DirectoryInfo aDirectory in allSubDirectories)
{
Console.WriteLine(aDirectory.ToString());
}
Console.ReadKey();
}
static List<DirectoryInfo> getAllSubdirectories(DirectoryInfo dir)
{
List<DirectoryInfo> subDirs = new List<DirectoryInfo>();
subDirs = dir.GetDirectories().ToList();
foreach (DirectoryInfo sDir in subDirs)
{
Console.WriteLine(sDir.ToString());
// allSubDirectories.Add(sDir);
subDirs.Concat(getAllSubdirectories(sDir));
}
return subDirs;
}
}
}
我注释掉的部分是引起问题的部分。
如果您能给予任何帮助,我将不胜感激!
您使用的是。net 4吗?在这种情况下:
System.IO.Directory.GetDirectories(@"C:'My Sample Path'","*",
System.IO.SearchOption.AllDirectories);
而不是:
allSubDirectories.Add(sDir);
应该是:
subDirs.Add(sDir);
您刚刚使用了错误的变量名称。allSubDirectories
是类级的,当getAllSubdirectories
被调用时,它不会被实例化。
编辑:
递归的一个更好的解决方案,有时(特别是当您使用Concat
作为替代方案时)是Stack<T>
:
static List<DirectoryInfo> getAllSubdirectories(DirectoryInfo dir)
{
List<DirectoryInfo> subDirs = new List<DirectoryInfo>();
Stack<DirectoryInfo> toProcess = new Stack<DirectoryInfo>();
toProcess.Push(dir);
while(toProcess.Count > 0) {
subDirs.AddRange(toProcess.Pop().GetDirectories());
}
return subDirs;
}