[英]Getting all sub directories using recursion
我正在獲取計算機中所有目錄和子目錄的列表。 我正在使用遞歸。
沒關系,直到我執行實際的遞歸
我收到此錯誤:
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("");
}
}
如您所見,每個目錄的最后一個獲取目錄中subdir的列表,並再次調用函數以執行遞歸。
此類從邏輯驅動程序接收所有頂級目錄,並深入到最后的目錄結構。
看起來您有兩個不同的變量,它們在不同的情況下被命名為同一事物:
System.IO.DirectoryInfo[] subDirs = null;
DirectoryInfo[] SubDirs = root.GetDirectories("*.*", SearchOption.TopDirectoryOnly);
您正在嘗試遍歷subDirs
但實際上從未在任何地方進行設置。
// subDirs is always null because you never set it to anything other than null
// in the variable declaration
foreach (System.IO.DirectoryInfo dirInfo in subDirs)
{
log.Add(dirInfo.ToString());
WalkDirectoryTree(dirInfo);
}
您delcare System.IO.DirectoryInfo[] subDirs = null;
但是您使用DirectoryInfo[] SubDirs
C#區分大小寫,
SubDirs
不是subdirs
您同時聲明兩個,同時使用兩個,但只能實例化一個。
您已清理的函數 (不是類)應該是
static void WalkDirectoryTree(System.IO.DirectoryInfo root)
{
foreach(var subDirectory in root.GetDirectories(
"*.*",
SearchOption.AllDirectories))
{
log.Add(subDirectory.ToString());
}
}
但是,將log
傳遞到函數中將是有意義的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.