0

ルートディレクトリから最後のレベルまでのすべてのサブディレクトリを取得したい。

コードを調整しましたが、第1レベルのフォルダーとその中のファイルのみを取得します。

最後のレベルを最後までやり遂げる方法はありますか?

これはコードです

    Response.Write("<ul class=\"jqueryFileTree\" style=\"display: none;\">\n");

    foreach (DriveInfo drive in allDrives)
    {
        if (drive.IsReady == true) 
        {
            Response.Write("\t<li class=\"drive collapsed\"><a href=\"#\" rel=\"" + drive.ToString() + "\">" + drive.ToString() + "</a>\n");     

            System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(drive.ToString());
            Response.Write("<ul>");

            foreach (System.IO.DirectoryInfo di_child in di.GetDirectories())
            {
                Response.Write("\t<li class=\"directory collapsed\"><a href=\"#\" rel=\"" + drive + di_child.Name + "/\">" + di_child.Name + "</a>\n");
                Response.Write("<ul>");

                foreach (System.IO.FileInfo fi in di.GetFiles())
                {
                    string ext = "";

                    if (fi.Extension.Length > 1)
                    {
                        ext = fi.Extension.Substring(1).ToLower();
                    }

                    Response.Write("\t<li class=\"file ext_" + ext + "\"><a href=\"#\" rel=\"" + drive + fi.Name + "\">" + fi.Name + "</a></li>\n");
                }

                Response.Write("</ul></li>");
            }
            Response.Write("</ul></li>");
       }
    }

    Response.Write("</ul>");
}
catch (Exception)
{
    throw;
}
4

1 に答える 1

3

再帰関数が必要です。

private IEnumerable<dynamic> GetFilesByDirectory(string path)
{
    var directories = Directory.GetDirectories(path);
    var files = Directory.GetFiles(path);

    yield return new {path, directories, files };

    foreach(var directory in directories)
    {
        yield return GetFilesByDirectory(directory);
    }
}

サイドノートとして。コントローラアクション内でResponse.Writeを呼び出さないでください。代わりにActionResult、ビューをレンダリングするためにを返し、HTMLテンプレートをビューに配置することができます。

于 2012-11-27T14:10:24.600 に答える