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;
}

EDIT:保持文件夹和文件独立的代码

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还没有达到最大值,还没有获取该文件的子目录。此外,您还需要检查该目录中是否存在文件,并检索它们。

如果您只想要文件名,可以使用递归方法。类似的东西:(没有保证完全正确,我在没有编译器的情况下写作)

    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);
                }
        }

扩展@pstrjds应答

private static IReadOnlyList<string> SearchFiles(string root, string pattern = "*", int depth = 1, params string[] exceptFolders)
{
    var files = Directory
        .EnumerateDirectories(root)
        .Where(it => !exceptFolders.Contains(Path.GetRelativePath(root, it)) && depth > 0)
        .SelectMany(it => SearchFiles(it, pattern, depth - 1, exceptFolders))
        .ToList();
    files.AddRange(Directory.EnumerateFiles(root, pattern));
    return files;
}

相关内容

  • 没有找到相关文章

最新更新