簡體   English   中英

使用遞歸獲取所有子目錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM