递归文件返回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();
}
}