递归文件返回json格式

递归文件返回json格式


前言

现在前后端分离,采用的交互数据格式大都是Json,我最近在写关于本地文件管理的系统,就需要实现返回指定路径下所有文件并且是树状的json格式。


提示:以下是本篇文章正文内容

1.建返回实体

代码如下(示例):

    public class FileTreeModels
    {
        public string Id { get; set; }
        public string Text { get; set; }
        public string Type { get; set; }
        public string Pid { get; set; }
        public List<FileTreeModels> Children { get; set; }
    }

2.递归获取文件夹树函数

代码如下(示例):

        /// <summary>
        /// 递归获取文件夹树
        /// </summary>
        /// <param name="di">根文件夹</param>
        /// <param name="model">输出信息</param>
        public static  void GetDirTree(DirectoryInfo di, ref FileTreeModels model)
        {
            model.Text = di.Name;
            model.Children = new List<FileTreeModels>();

            var subDirs = di.GetDirectories();
            foreach (var dir in subDirs)
            {
                var temp = new FileTreeModels();
                model.Children.Add(temp);
                GetDirTree(dir, ref temp);
            }
        }

3.递归获取全文件树函数

代码如下(示例):

    /// <summary>
        /// 递归获取全文件树
        /// </summary>
        /// <param name="di">根文件夹</param>
        /// <param name="model">输出信息</param>
        public static void GetFilesTree(DirectoryInfo rootDir, DirectoryInfo di, ref FileTreeModels model)
        {
            Func<string, string> getId = (path) => {
                return path.Replace(rootDir.FullName.TrimEnd('/', '\\', System.IO.Path.DirectorySeparatorChar), "").Replace(System.IO.Path.DirectorySeparatorChar, '/');
            };
            model.Text = di.Name;
            model.Type = "DIR";
            model.Id = getId(di.FullName);

            var fi = di.GetFiles();
            model.Children = new List<FileTreeModels>();
            model.Children.AddRange(fi.Select(m => new FileTreeModels { Text = m.Name, Type = "FILE", Id = getId(m.FullName) }));

            var subDirs = di.GetDirectories();
            foreach (var dir in subDirs)
            {
                var temp = new FileTreeModels();
                model.Children.Add(temp);
                GetFilesTree(rootDir, dir, ref temp);
            }
        }

调用

代码如下(示例):

     async static Task Main(string[] args)
        {
            var url = new System.IO.DirectoryInfo(@"D:\InnerVerFiles\Files");
            FileTreeModels tree = new FileTreeModels();
           // GetDirTree(url,ref tree);      
            GetFilesTree(url, url, ref tree);
            Console.WriteLine(JsonHelper.toJson(tree));
            Console.ReadKey();
        }
        }

返回结果

返回结果

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值