public class MyDirectory
{
public string Path { get; set; }
public List<MyDirectory> MyDirectories { get; set; }
}
然后我写了两个像这样的方法
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;
}
但我不工作任何人都可以将其改为工作方法吗? 我不知道如何填写我的Poco正确。我需要递归方法。
答案 0 :(得分:0)
您可以使用此代码
而不是递归Directory.GetDirectories(path, "*", SearchOption.AllDirectories)
答案 1 :(得分:0)
如果您想递归加载目录,那么您不需要GetList方法。方法DirSearch已经足够,但需要进行一些重构,如下所示:
function update(data) {
// DATA JOIN
// Join new data with old elements, if any.
var text = svg.selectAll("text")
.data(data);
// UPDATE
// Update old elements as needed.
text.attr("class", "update");
// ENTER
// Create new elements as needed.
text.enter().append("text")
.attr("class", "enter")
.attr("x", function(d, i) { return i * 32; })
.attr("dy", ".35em");
// ENTER + UPDATE
// Appending to the enter selection expands the update selection to include
// entering elements; so, operations on the update selection after appending to
// the enter selection will apply to both entering and updating nodes.
text.text(function(d) { return d; });
// EXIT
// Remove old elements as needed.
text.exit().remove();
}
请注意我使用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;
}
代替Directory.EnumerateDirectories
的代码段。我这样做是因为后者不具备表现力。
要调用此方法,请执行以下操作:
Directory.GetDirectories
您可以使用lst = DirSearch(pathToYourDirectory);
代替IEnumerable
作为List
属性的类型,使其更好。
您的代码最终将如下所示:
MyDirectories
确实,您的静态属性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)
});
}
也必须是lst
类型。
通过执行这些更改,您将能够开始使用IEnumerable<MyDirectory>
的每个实例,而不是在使用MyDirectory
时等待返回所有子目录。
答案 2 :(得分:0)
为您的POCO创建cunstructor。
public class MyDirectory
{
public MyDirectory()
{
MyDirectories = new List<MyDirectory>();
}
public string Path { get; set; }
public List<MyDirectory> MyDirectories { get; set; }
}
递归方法:
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;
}
最后拨打FindRecursiveDirectories
方法。
var result = FindRecursiveDirectories(yourDirectory);