打印给出路径的文件和目录的数量

Print number of file and directories giving the path

正如标题所说,我正在寻找一种方法来打印树中的所有目录和文件。我有一棵这样的树:

C:/
├── Program Files/
│   └── Word
└── Program Files (x64)/
    ├── Chrome
    └── Ink

我的代码经过一个分支,我无法返回进入新文件夹。例如,我可以在 Chrome 中进行计数,但我无法返回查看 Ink 内部,因为我的代码结束了迭代。这是:

    private void countFiles(string directoryPath, string VmVsphereName, string restorePointID)
    {
        //Verifica autorizzazione sui dati
        Guid oidVm;
        using (TSCLOUDEntities context = new TSCLOUDEntities())
        {
            oidVm = (
                        from vm in context.VM10_MACCHINE_VIRTUALI
                        where vm.VM10_VSPHERE_NAME == VmVsphereName
                        select vm.VM10_OID
                     ).Concat(
                        from vm in context.NCL10_VIRTUAL_MACHINE
                        where vm.NCL10_VSPHERE_NAME == VmVsphereName
                        select vm.NCL10_OID
                     ).Single();
        }

        TipoPiattaformaCloud tipoPiattaformaCloud = Bll_VirtualMachines.GetCloudPlatfomOfVm(oidVm);
        VeeamCredential veeamCredential = Code.Config.Instance.GetVeeamCredential(tipoPiattaformaCloud);

        string veeamResponseHeader = GetVeeamResponseHeader();
        string veeamSessionId = GetVeeamSessionId();
        VeeamClient veeamClient = new VeeamClient(veeamCredential, veeamResponseHeader, veeamSessionId);

        if (href == "")
        {
            fileSystemEntries = CatalogUtility.GetFileSystemEntries(veeamClient, VmVsphereName, restorePointID, directoryPath);
            files += Directory.GetFiles(directoryPath, "*.*", SearchOption.AllDirectories).Count();
            directories += Directory.GetDirectories(directoryPath, "*.*", SearchOption.AllDirectories).Count();
        } else
        {
            fileSystemEntries = CatalogUtility.GetFileSystemEntriesByHref(veeamClient, href);
            files += Directory.GetFiles(path, "*.*", SearchOption.AllDirectories).Count();
            directories += Directory.GetDirectories(path, "*.*", SearchOption.AllDirectories).Count();
        }

        for (int i = 0; i < fileSystemEntries.Directories.Count(); i++)
        {
            try
            {
                path = fileSystemEntries.Directories[i].Path;
                href = fileSystemEntries.Directories[i].Href;
                var stepInside = CatalogUtility.GetFileSystemEntriesByHref(veeamClient, href);
                directories += stepInside.Directories.Count();
                files += stepInside.Files.Count();
                if (stepInside.Files.Count() != 0)
                {
                    foreach (var file in stepInside.Files)
                    {
                        space += file.Size;
                    }
                }
                if (stepInside.Directories.Count() > 0)
                {
                    countFiles(path, VmVsphereName, restorePointID);
                }
            } catch (UnauthorizedAccessException ex)
            {
                continue;
                //Do nothing
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }
            directories += fileSystemEntries.Directories.Count();
            files += fileSystemEntries.Files.Count();
            count += 1;
        }
    }

希望我说清楚了。感谢大家

这是一个应该递归执行此操作的示例。

public static void RecursivePrintFiles(string Path, int TabDepth)
{
    int tabDepth = TabDepth;
    while (tabDepth-- > 0)
      Console.Write("\t");
    Console.Write(System.IO.Path.GetFileName(Path) + "\r\n");
    IEnumerable<string> Directories = Directory.EnumerateDirectories(Path);
    IEnumerable<string> Files = Directory.EnumerateFiles(Path);
    tabDepth = TabDepth;
    foreach (string file in Files)
    {
       while (tabDepth-- > 0)
          Console.Write("\t");
       Console.Write(System.IO.Path.GetFileName(file) +"\r\n");
    }
  foreach (string Directory in Directories)
     RecursivePrintFiles(Directory, ++TabDepth);
}
private static void Main(string[] args)
{
    string Path = "C:\Users\devlinp\Downloads\mlem";
    RecursivePrintFiles(Path, 0);
}

我发现递归在这种情况下非常有用。我会尝试使用此代码作为入门代码并将其更改为您要查找的格式。