I wrote a poco like this :
public class MyDirectory
{
public string Path { get; set; }
public List<MyDirectory> MyDirectories { get; set; }
}
then I wrote 2 methods like this
private static List<MyDirectory> lst = new List<MyDirectory>();
private static void DirSearch(string dir)
{
var dirs = Directory.GetDirectories(dir);
foreach (string d in dirs)
{
var ddd = new MyDirectory();
ddd.Path = d;
ddd.MyDirectories = GetList(Directory.GetDirectories(d));
lst.Add(ddd);
DirSearch(d);
}
}
private static List<MyDirectory> GetList(string[] list)
{
var lst = new List<MyDirectory>();
foreach (var l in list)
{
lst.Add(new MyDirectory() { Path = l });
}
return lst;
}
but I does not work Can anybody change it to working method ? I dont know How fill my Poco correctly. I need recursively method.
您可以使用此代码,而不是递归
Directory.GetDirectories(path, "*", SearchOption.AllDirectories)
If you want to recursively load directories then you don't GetList method. The method DirSearch is sufficient but need some refactoring like below:
private static List<MyDirectory> DirSearch(string directory)
{
var directories = new List<MyDirectory>();
foreach (var l in Directory.EnumerateDirectories(directory))
{
directories.Add(new MyDirectory
{
Path = l,
MyDirectories = DirSearch(l)
});
}
return directories;
}
Notice in the snippet I'm using Directory.EnumerateDirectories
instead of Directory.GetDirectories
. I do this because the latter isn't performant.
To call this method just do this:
lst = DirSearch(pathToYourDirectory);
You can make it better by using IEnumerable
instead of List
as type of MyDirectories
property.
Your code will finally look like this :
public class MyDirectory
{
public string Path { get; set; }
public IEnumerable<MyDirectory> MyDirectories { get; set; }
}
private static IEnumerable<MyDirectory> DirSearch(string directory)
{
return Directory.EnumerateDirectories(directory).Select(l => new MyDirectory
{
Path = l,
MyDirectories = DirSearch(l)
});
}
Indeed your static property lst
need to be of type IEnumerable<MyDirectory>
also.
By doing those changes you will be able to start using each instance of MyDirectory
instead of waiting all subdirectories to be returned when using List
.
Create cunstructor for your POCO.
public class MyDirectory
{
public MyDirectory()
{
MyDirectories = new List<MyDirectory>();
}
public string Path { get; set; }
public List<MyDirectory> MyDirectories { get; set; }
}
Recursive Method:
private MyDirectory FindRecursiveDirectories(string dir)
{
var rootDirectory = new MyDirectory();
rootDirectory.Path = dir;
foreach (var subDirectory in Directory.EnumerateDirectories(dir))
{
var myDir = FindRecursiveDirectories(subDirectory);
rootDirectory.MyDirectories.Add(myDir);
}
return rootDirectory;
}
Finally call FindRecursiveDirectories
Method.
var result = FindRecursiveDirectories(yourDirectory);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.