简易文件夹无限级,使用递归重构层级列表

 1      /// <summary>
 2      /// 文件夹实体
 3      /// </summary>
 4      public class Folder
 5      {
 6          /// <summary>
 7          /// 文件夹ID
 8          /// </summary>
 9          public int id { get; set; }
10          /// <summary>
11          /// 文件夹名称
12          /// </summary>
13          public string name { get; set; }
14          /// <summary>
15          /// 父级ID
16          /// </summary>
17          public int folder_parent_id { get; set; }
18     }


 1         /// <summary>
 2         /// 重构文件夹层级列表
 3         /// </summary>
 4         /// <param name="listSource">源数据</param>
 5         /// <param name="pId">父级ID</param>
 6         /// <param name="count">添加元素的次数</param>
 7         /// <param name="levelNum">当前层级</param>
 8         /// <param name="listResult">返回结果集</param>
 9         private void RefactorFolderLevelList(List<Folder> listSource, int pId, int count, List<int> levelNum, List<Folder> listResult)
10         {
11             var len_source = listSource.Count();
12             if (count < len_source)
13             {
14                 var tmp_list = listSource.Where(m => m.folder_parent_id == pId);
15                 var len_tmp_list = tmp_list.Count();
16                 bool addFlag = true;
17                 int level = levelNum.Count();
18                 int i = 0;
19                 foreach (var item in tmp_list)
20                 {
21                     i++;
22                     item.name = FillString(level, "——") + item.name;
23                     var model = listResult.Where(m => m.id == item.id).FirstOrDefault();
24                     if (pId == 0 && model != null)
25                         continue;
26                     else
27                         listResult.Add(item);
28                     ++count;
29                     if (listSource.Where(m => m.folder_parent_id == item.id).Count() > 0)
30                     {
31                         if (!levelNum.Contains(item.id) && addFlag)
32                         {
33                             addFlag = false;
34                             levelNum.Add(item.id);
35                         }
36                         RefactorFolderLevelList(listSource, item.id, count, levelNum, listResult);
37                     }
38                     else
39                     {
40                         if (i < len_tmp_list)
41                             continue;
42                         levelNum = new List<int>();
43                         RefactorFolderLevelList(listSource, 0, count, levelNum, listResult);
44                     }
45                 }
46             }
47         }
48         /// <summary>
49         /// 字符串填充
50         /// </summary>
51         /// <param name="n">填充的次数</param>
52         /// <param name="str">需要填充的字符串</param>
53         /// <returns></returns>
54         private string FillString(int n, string str)
55         {
56             StringBuilder ret = new StringBuilder();
57             for (int i = 0; i < n; i++)
58             {
59                 ret.Append(str);
60             }
61             return ret.ToString();
62         }

效果图:




				
时间: 2024-11-08 02:13:43

简易文件夹无限级,使用递归重构层级列表的相关文章

HTML5+PHP 实现 保存文件夹相对路径 递归上传 在线浏览

这是最近花了一周多手工马出来的,前段用了MetroUI,后台是ThinkPHP,数据库MySQL,先看看效果吧.由于项目涉及敏感词汇我就码了一下. 1.选择要上传的文件夹,上传以后默认都在根目录下. 2.看看后台管理界面的效果,实现多级目录,可以显示图片内容,返回上一级 正文: 谈到文件夹上传,应该都不觉得难,一个input框加上一个php后台就够了.但是这次的需求说起来容易,但是其实还挺难的.要把一个文件夹的文件递归上传,保存目录结构,能够在浏览器里展示出来,其实是三个过程. [1]上传时要保

linux文件夹操作及递归遍历文件夹

文件夹相关函数介绍 //mkdir 函数创建文件夹 #include <sys/stat.h> #include <sys/types.h> int mkdir(const char *pathname, mode_t mode); //rmdir 删除文件夹 #include <unistd.h> int rmdir(const char *pathname); //dopendir/fdopendir  //打开文件夹 DIR是一个结构体,是一个内部结构,用来存储读

Powershell获取文件夹大小和排序【层级关系】【大小】【名称】

#***************************************************************************************** #使用示例: #示例:GetFoldersize.ps1 -FolderPath "D:\Exchange Server" -sort Layer -Class 3 -Size 0.5 #获取"D:\Exchange Server"目录下的3层以内的大于0.5GB的子文件夹,并按照子文件

文件夹比较 java递归比较文件夹

手工发布程序到多个节点,没有做自动同步,偶尔会出现节点程序不一致的情况,所以写了个文件夹比较的小程序,用于对比两个文件夹内文件的不同. import java.io.File; import java.io.FileInputStream; import java.math.BigInteger; import java.security.MessageDigest; import java.util.HashMap; import java.util.Iterator; import java

Python实现对文件夹内文本文件递归查找

经常有这样的需求:在一个文本文件里查找特定字符串,这很好实现,用任何文本查看工具几乎都可以做到.而有的时候,想查找一个文件夹下的所有文本文件(特定后缀),我就遇到了这样的问题:想找到Blender的源代码中关于SPH的实现代码.于是写了下面的简单程序: #!/usr/bin/env python3 import os def Search(rootDir, suffixes, arg): for lists in os.listdir(rootDir): path = os.path.join(

c#拷贝整个文件夹到指定文件夹下(非递归)

public static void CopyEntireDir(string sourcePath, string destPath) { //Now Create all of the directories foreach (string dirPath in Directory.GetDirectories(sourcePath, "*", SearchOption.AllDirectories)) Directory.CreateDirectory(dirPath.Repla

java扫描文件夹下面的所有文件(递归与非递归实现)

java中扫描指定文件夹下面的所有文件扫描一个文件夹下面的所有文件,因为文件夹的层数没有限制可能多达几十层几百层,通常会采用两种方式来遍历指定文件夹下面的所有文件.递归方式非递归方式(采用队列或者栈实现)下面我就给出两种方式的实现代码,包括了递归与非递归实现,code如下所示. package q.test.filescanner; import java.io.File;import java.util.ArrayList;import java.util.LinkedList; import

递归求一个文件夹大小(二)

public class Test1 { public static void main(String[] args) { // 统计文件夹大小 long len = getDirLength(new File("D:\\JavaSE")); System.out.println(len + "字节"); } // 返回值long类型,参数列表:File dir public static long getDirLength(File dir) { // 定义统计变

文件和文件夹操作

一.文件操作 1.File类的常用静态方法: void AppendAllText(string path, string contents),将文本contents附加到文件path中 bool Exists(string path)判断文件path是否存在 string[] ReadAllLines(string path) 读取文本文件到字符串数组中 string ReadAllText(string path) 读取文本文件到字符串中 void WriteAllText(string p