如何解决x深度的所有文件夹和文件的列表
|| 我想获得x深度的所有文件夹和文件的列表。 如果x为2,那么我将获得有关第一个文件夹中的所有文件夹和文件以及第一个文件夹中的所有文件夹和文件的信息。 这该怎么做?解决方法
此代码将执行其他答案的操作,但还会返回文件夹名称(这似乎是您要问的内容的一部分)。这将需要.Net 4.0。如果您希望跟踪哪些是文件夹,哪些是文件,则可以返回一个元组,其中包含一个文件列表和一个文件夹列表。
List<string> GetFilesAndFolders(string root,int depth)
{
var list = new List<string>();
foreach(var directory in Directory.EnumerateDirectories(root))
{
list.Add(directory);
if (depth > 0)
{
list.AddRange(GetFilesAndFolders(directory,depth-1));
}
}
list.AddRange(Directory.EnumerateFiles(root));
return list;
}
编辑:使文件夹和文件分开的代码
Tuple<List<string>,List<string>> GetFilesAndFolders(string root,int depth)
{
var folders = new List<string>();
var files = new List<string>();
foreach(var directory in Directory.EnumerateDirectories(root))
{
folders.Add(directory);
if (depth > 0)
{
var result = GetFilesAndFolders(directory,depth-1);
folders.AddRange(result.Item1);
files.AddRange(result.Item2);
}
}
files.AddRange(Directory.EnumerateFiles(root));
return new Tuple<List<string>,List<string>>(folders,files);
}
,我觉得好像以前已经解决了。基本上,您要做的是询问当前文件是否为目录,如果为true且x尚未最大化,则获取该文件的子目录。另外,您需要检查该目录中是否存在文件并进行检索。
,好的,这是一个简单的解决方案。
private static IList<string> GetFilesToDepth(string path,int depth)
{
var files = Directory.EnumerateFiles(path).ToList();
if (depth > 0)
{
var folders = Directory.EnumerateDirectories(path);
foreach (var folder in folders)
{
files.AddRange(GetFiles(folder,depth - 1));
}
}
return files;
}
将其更改为EnumFilesToDepth()
(即摆脱ToList())可能很有吸引力。但是,这需要更多的思考和工作,而递归Iterator则比较棘手。
,如果只需要文件名,则可以使用递归方法。像这样的东西:
(没有保证完全正确的保证,我编写时没有编译器)
public static List<String> GetSubfoldersAndFiles(DirectoryInfo di,int deep)
{
List<string> myContent = new List<string>();
foreach(FileInfo fi in di.GetFiles())
{
myContent.Add(fi.FullName);
}
if(deep > 0)
{
foreach(DirectoryInfo subDi in di.GetDirectories())
{
myContent.AddRange(GetSubfoldersAndFiles(subDi,deep - 1).ToArray());
}
}
return myContent;
}
呼叫将是这样的:
List<string> content = GetSubfoldersAndFiles(new DirectoryInfo(@\"c:\\\",3));
,所有子文件夹
public List<string> listDir(string pPath)
{
List<string> dirList = new List<string>();
listDir(pPath,dirList);
return dirList;
}
private void listDir(string pPath,List<string> pList)
{
string[] loDirs = System.IO.Directory.GetDirectories(pPath);
foreach (string loDir in loDirs)
{
pList.Add(loDir);
listDir(loDir,pList);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。