写了个简单的类,递归得到给定目录下的所有子目录,但是发觉只能得到第一层,不知道代码哪里逻辑有错误,请大家帮忙看看,头有点晕~谢谢!
class utils
{
private List<string> folderAll = new List<string>();
public List<string> FolderAll
{
get
{
return this.folderAll;
}
} public void getAllFolders(string folderParent)
{
DirectoryInfo foldRoot = new DirectoryInfo(folderParent);
if (foldRoot.Exists)
{
DirectoryInfo[] foldSubs = foldRoot.GetDirectories(); foreach (DirectoryInfo foldSub in foldSubs)
{
this.folderAll.Add(foldSub.Name);
getAllFolders(foldSub.Name.ToString());
}
}
}
}
class utils
{
private List<string> folderAll = new List<string>();
public List<string> FolderAll
{
get
{
return this.folderAll;
}
} public void getAllFolders(string folderParent)
{
DirectoryInfo foldRoot = new DirectoryInfo(folderParent);
if (foldRoot.Exists)
{
DirectoryInfo[] foldSubs = foldRoot.GetDirectories(); foreach (DirectoryInfo foldSub in foldSubs)
{
this.folderAll.Add(foldSub.Name);
getAllFolders(foldSub.Name.ToString());
}
}
}
}
修改为
foldSub.FullName
改用DirectoryInfo来递归不是更方便?
using System.Collections.Generic;
using System.Text;
using System.IO;namespace ConsoleApplication2
{
class utils
{
private List<string> folderAll = new List<string>(); public List<string> FolderAll
{
get
{
return this.folderAll;
}
} public void getAllFolders(string folderParent)
{
DirectoryInfo foldRoot = new DirectoryInfo(folderParent); if (foldRoot.Exists)
{
DirectoryInfo[] foldSubs = foldRoot.GetDirectories();
foreach (DirectoryInfo foldSub in foldSubs)
{
this.folderAll.Add(foldSub.FullName);
getAllFolders(foldSub.FullName.ToString());
}
}
}
}
class Program
{
static void Main(string[] args)
{
utils u = new utils();
u.getAllFolders(@"e:\s");
foreach (string s in u.FolderAll)
{
Console.WriteLine(s.ToString()); }
Console.ReadLine();
}
}
}
2楼正确啊,是路径问题啊,要使用全路径,而不是目录名字
这么定义方法不就可以了
再加个string的重载,就能和原来一样的方式调用了