【问题标题】:Recursive function - Don't show directory if empty递归函数 - 如果为空则不显示目录
【发布时间】:2014-04-15 07:25:13
【问题描述】:

我正在创建一个需要列出特定文件夹中所有文件和目录的 Web 应用程序。 我创建了 resurvice 函数来列出这些,但另一个规范是,如果目录没有文件,则不应显示该目录。

现在的问题是,如果我有一个带有子菜单、带有子菜单、带有子菜单、带有子菜单的目录,并且只有最后一个子菜单中有文件,该怎么办。它仍然需要显示所有其他目录。

我不知道如何实现这一点,任何代码或提示将不胜感激!

我当前的递归函数:

private List<FolderModel> GetFolderSubFolders(IFolderInfo folder)
    {
        var retval = new List<FolderModel>();

        // Foreach subfolder in the given folder
        foreach (var subFolder in FolderManager.Instance.GetFolders(folder))
        {
                // Create new foldermodel
                var folderModel = new FolderModel
                {
                    FolderName = subFolder.FolderName,
                    Bestanden = GetFolderBestanden(subFolder),
                    // Recall this function
                    SubFolders = GetFolderSubFolders(subFolder)
                };

            // Check if we have files and subfolders
            if (folderModel.Bestanden.Any() && folderModel.SubFolders.Any())
            {
                folderModel.hasFilesAndFolders = true;
            }

            retval.Add(folderModel);

        }
        return retval;
    }

【问题讨论】:

  • 你想隐藏空文件夹还是显示?
  • 隐藏文件夹,如果其中没有任何文件(包括子文件夹)

标签: c# recursion


【解决方案1】:

让它找到所有目录,然后过滤其中有文件的目录:

List<FolderModel> allFolders = GetFolderSubFolders(myFolder);

List<FolderModel> nonEmptyFolders = allFolders.Where(f => f.HasFiles).ToList();

【讨论】:

    【解决方案2】:

    我没有尝试运行它,但我认为这样的东西应该可以工作:

    private List<FolderModel> GetFolderSubFolders(IFolderInfo folder)
    {
        var retval = new List<FolderModel>();
    
        // Foreach subfolder in the given folder
        foreach (var subFolder in FolderManager.Instance.GetFolders(folder))
        {
            // Recall this function
            List<FolderModel> subFolders = GetFolderSubFolders(subFolder);
            // I am assuming that "Bestanden" is also a List<T> and contains
            // the files of this folder
            List<Something> bestanden = GetFolderBestanden(subFolder);
            // Don't do anything if an empty list was returned
            if(subFolders.Count > 0 || bestanden.Count > 0)
            {
                // Create new foldermodel
                var folderModel = new FolderModel
                {
                    FolderName = subFolder.FolderName,
                    Bestanden = bestanden,
                    SubFolders = subFolders
                };
    
                // Check if we have files and subfolders
                if (folderModel.Bestanden.Any() && folderModel.SubFolders.Any())
                {
                    folderModel.hasFilesAndFolders = true;
                }
    
                retval.Add(folderModel);
            }
        }
        // If nothing was found this will return an empty list
        return retval;
    }
    

    我们的想法是,如果您在最后一级没有找到任何东西,您就不会返回任何东西。由于我没有运行它,所以上面可能不起作用,但您可能会得到提示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-03
      • 2023-03-03
      • 2022-12-10
      • 2013-04-03
      相关资源
      最近更新 更多