【发布时间】:2012-11-23 14:25:17
【问题描述】:
我正在获取计算机中所有目录和子目录的列表。 我正在使用递归。
在我执行实际递归之前没关系
我收到此错误:
System.NullReferenceException: Object reference not set to an instance of an object.
at tgpwebged.Views.Admin.recursiveFileTree.WalkDirectoryTree(DirectoryInfo root)
in s:\Projects\tgpwebged\tgpwebged\Views\Admin\recursiveFileTree.cs:line 93
这是类:
static void WalkDirectoryTree(System.IO.DirectoryInfo root)
{
System.IO.DirectoryInfo[] subDirs = null;
try
{
DirectoryInfo[] SubDirs = root.GetDirectories("*.*", SearchOption.TopDirectoryOnly);
foreach(DirectoryInfo sdir in SubDirs) {
log.Add(sdir.ToString());
}
}
catch (Exception e)
{
log.Add("Exceção: " + e.ToString());
}
try
{
foreach (System.IO.DirectoryInfo dirInfo in subDirs)
{
log.Add(dirInfo.ToString());
WalkDirectoryTree(dirInfo);
}
}
catch (Exception e)
{
log.Add("Exceção: " + e.ToString());
log.Add("");
}
}
如您所见,最后一个 for each 获取目录中的子目录列表并再次调用该函数执行递归。
此类从逻辑驱动程序接收所有顶级目录并深入到最后一个目录结构。
【问题讨论】:
-
你在哪里设置过 subDirs 的值?它是空的。
-
recursiveFileTree.cs的第 93 行是哪一行?这应该可以为您提供有关问题所在的线索。虽然如果我不得不猜测,我怀疑潜在的问题是某个地方的堆栈溢出。我相信,如果您深入了解 System.IO,您会发现它会跳入不安全的代码中来发挥它的魔力。 -
如果你想枚举所有目录,避开
AllDirectories选项是没有意义的。
标签: c# asp.net asp.net-mvc recursion asp.net-mvc-4