I have this problem that i cant seem to overcome. i am trying to list all the directories and sub directories. This is what i have so far in code :
String[] Folders;
String[] Files;
path = Server.MapPath("/");
DirectoryInfo dir = new DirectoryInfo(path);
Folders = Directory.GetDirectories(path);
try
{
FolderListing.Append("<ul id=\"FolderList\">");
for (int x = 0; x < Folders.Length; x++ )
{
DirectoryInfo folder = new DirectoryInfo(Folders[x]);
FolderListing.Append("<li>").Append(folder.Name).Append("</li>");
CheckSubdirectories(Folders[x]);
}
FolderListing.Append("</ul>");
FolderList.Text = FolderListing.ToString();
}
catch (Exception exc) //Module failed to load
{
Exceptions.ProcessModuleLoadException(this, exc);
}
}
private void CheckSubdirectories(string currentpath)
{
String[] subfolders = Directory.GetDirectories(currentpath);
if (subfolders.Length != 0)
{
FolderListing.Append("<ul id=\"SubFolderList\">");
}
for (int x = 0; x < subfolders.Length; x++ )
{
DirectoryInfo sfolder = new DirectoryInfo(subfolders[x]);
FolderListing.Append("<li>").Append(sfolder.Name).Append("</li>");
}
if (subfolders.Length != 0)
{
FolderListing.Append("</ul>");
}
path = currentpath.ToString();
}
i would like the end result to be :
<ul>
<li>admin</li>
<ul>
<li>Containers</li>
<li>ControlPanel</li>
<li>Menus</li>
<ul>
<li>etc etc</li>
</ul>
</ul>
</ul>
if anyone can help me please
Hope this recursive method helps:
To invoke it, just create an instance of
StringBuilder
and send it along with the path to the method:You can solve the problem by using a recursive approach. You need a method that calls itself in order to list subdirectories that are nested at any depth.
The list should look like this in HTML. Note that a subdirectory's
<li>
must enclose the whole nested<ul>
.This will produce the following output:
With this information, we can refine the method above (in pseudo-code)
You also will have to enclose the whole thing in a
<ul> </ul>
pair. Also, you could use a slightly different scheme on the first level, in order to list files and directories instead of just one root directory, as my code above would.This works:
From my example directory I got this output: