写在前

 

         之前写了一篇关于 文件夹与文件的操作的文章  操作文件方法简单总结(File,Directory,StreamReader,StreamWrite ) 

把常用的对于文件与文件夹的操作总结了一下,在文章的回复中有提到 遗漏的方法,并建议做一个文档管理工具 ,一细想是可以啊,之后就开始构思,最后大至需求如下,

因为都是下班后在家中花时间做的,时间有点短,有BUG是正常的,希望大家谅解,再一个对windows的文件权限,几乎是0接触所以把权限处理留到了后期,如果大家有关于文件夹权限处理的好文章,希望大家给我留言,好的东西需要分享,本篇会写一下几个功能点的思路与做法,算是对自己的总结,如果对本项目有兴趣的朋友请 狂点这里

最后如果您觉得,有什么地方做得不够好,或者您有什么建议 与 意见 请一定要指出! 在此非常感谢!  

 

 

一 工具功能点

 一 展示
1 以树形展示单个磁盘内所有文件夹子文件夹,与文件名
2 支持子文件夹的层级展开
3 右侧支持文本文档的预览(二期)
4 若是图片支持预览(二期)
 
二 操作
 1 支持指定目录下的文件夹新增,(右键)
 2 支持指定目录下的文件夹删除(右键)
 3 支持指定目录下的文件夹,与文件的重命名((右键))
 4 支持指定目录下的文件夹与文件移动到另一指定的文件夹(托拽)
 5 支持指定目录下的文件夹批量删除
 6 支持指定目录下的文件搜索 (只要文件名匹配即可)(二期)
 7 文件夹与文件的访问权限处理
 
以上就是大至简单的需求,然后根据需求,选择了以下几个小插件
zTree:树形插件 个人觉得很不错,国内的插件,API文档解释很详细,至少我从来没用过树形插件的,比较容易的就上手了。 zTree插件地址
Layer:弹出层插件,使用简单,效果好,拿来即用   Layer插件地址
 

二 工具基本介绍

 
先上几张图  新建文件夹,文件夹或文件重命名
文件夹管理工具(MVC+zTree+layer)(附源码) 文件夹管理工具(MVC+zTree+layer)(附源码)
 
删除文件或文件夹(支持批量删除)
 
文件夹管理工具(MVC+zTree+layer)(附源码)
 
以拖拽形式批量移动文件夹
 
文件夹管理工具(MVC+zTree+layer)(附源码)
 
 
 
 

三 功能实现讲解

 
3.1 加载文件夹树
 
  根据zTree需要的参数配置就行了,具体参数请大家看zTree的API吧,着重写一下加载时遇到的坑
实现思路:遍历指定路径下第一层所有文件夹与文件并组成对象序列化成Json并返回Json数据给zTree绑定
 
    刚开始想着一次性把所有的文件与文件夹都加载出来,然后用递归实现,但是因为我定义了一个类来保存文件的信息,而且是以嵌套的形式存的,这样的做法初看觉得
很有层次感到写递归时,却把自己坑了,也主要是以前没认真写过递归,导致这一方法纠结了一个晚上再加上午的一点时间,终于递归出来了,
然后一试验,浏览器直接死了,数量太大嵌套的太深,加载一次至少要40秒以上,于是果断放弃了,改为每次只加载一层
以下为保存数据的类,与加载的方法 , 这里只列出部分代码,具体代码在源码中都可找到
 
类设计
 1  public class zTreeModel
 2     {
 3         public zTreeModel()
 4         {
 5             _isPrent = false;
 6             _children = new List<zTreeModel>();
 7         }
 8 
 9         private bool _isPrent ;
10         private List<zTreeModel> _children = null;
11        
12         /// <summary>
13         ///根结点名字
14         /// </summary>
15         public string rootFullName { get; set; }
16 
17         /// <summary>
18         /// 父结点名称
19         /// </summary>
20         public string pName { get; set; }
21         /// <summary>
22         /// 父结点全路径名称
23         /// </summary>
24         public string pFullName { get; set; }
25 
26         /// <summary>
27         /// 当前结点全路径名称
28         /// </summary>
29         public string fullName { get; set; }
30 
31         /// <summary>
32         /// 当前结点名称
33         /// </summary>
34         public string name { get; set; }
35    
36         /// <summary>
37         /// 是否为父结点
38         /// </summary>
39         public bool isParent {
40             get { return _isPrent; }
41             set { _isPrent = value; }
42         }
43         /// <summary>
44         /// 是否为顶层节点
45         /// </summary>
46         public bool topNode { get; set; }
47 
48         /// <summary>
49         /// 是否为文件 默认为False 
50         /// </summary>
51         public bool isFile { get; set; }
52 
53         /// <summary>
54         /// 是否打开
55         /// </summary>
56         public bool open { get; set; }
57 
58         /// <summary>
59         /// 子结点
60         /// </summary>
61         public List<zTreeModel> children
62         {
63             get { return _children; }
64             set { _children = value; }
65         }
66     }
View Code

JavaScript

 1     var zTreeObj,
 2         setting = {
 3             view: {
 4                 selectedMulti: true,
 5                 showLine: true                
 6             },
 7             edit: {
 8                 drag: {
 9                     isMove: true,
10                     inner:true//拖拽后为同级节点,
11                 },//托拽操作配置
12                 enable: true,//节点可编辑
13                 showRemoveBtn: false,
14                 showRenameBtn: false,
15                 editNameSelectAll: true
16             },
17             data: {
18                 keep: {
19                     parent:true //删除子节点后父节点不变为叶子节点
20                 },
21                 
22             },
23             async: {
24                 enable: true,
25                 autoParam:["fullName"],
26                 url: "/FileManager/GetSingleLevelNodes",
27                 type: "POST",
28                 
29             },
30             treeNode: {
31                 checked:true
32                     
33             },
34             callback:
35             {
36                // beforeExpand: zTreeBeforeExpand,//展开节点前的回调方法
37 
38                 beforeRename: zTreeBeforeRename,//重命名之前的回调方法
39                 onRename: zTreeOnRename,//重命名
40                 
41                 beforeRemove: zTreeBeforeRemove,//删除前回调方法
42                 onRemove: zTreeRemove,//删除
43                 
44                 beforeRightClick: zTreeBeforeRightClick,//右键方法前的回调
45                 onRightClick: zTreeOnRightClick,//右键方法
46                 
47                 beforeDrop: zTreeBeforeDrop,//用于捕获节点拖拽操作结束之前的事件回调函数,并且根据返回值确定是否允许此拖拽操作.如果返回 false,zTree 将恢复被拖拽的节点,也无法触发 onDrop 事件回调函数
48                 onDrop: zTreeOnDrop,//拖拽操作结束的事件
49                 beforeDrag: zTreeBeforeDrag//托拽前的方法 
50                 
51            }
52         };
53        
54     var zTreeNodes = "";
55     $(function () {
56         ReLoadTree();
57     });
58     
59     function ReLoadTree() {
60         $.ajax({
61             url: "/FileManager/GetDefaultFiles",
62             type: "POST",
63             async: false,
64             dataType: "json",
65             success: function (data) {
66                 zTreeNodes = data;
67             }
68         });
69         zTreeObj = $.fn.zTree.init($("#tree"), setting, zTreeNodes);
70 
71     }
View Code

C#

 1         public List<zTreeModel> GetDefaultFiles(string path)
 2         {
 3             zTreeModel treeModel = null;
 4             List<zTreeModel>  treeModelList = new List<zTreeModel>();
 5             if (Directory.Exists(path))
 6             {
 7                 //获取子目录
 8                 DirectoryInfo  directory =  new DirectoryInfo(path);
 9               
10                 try
11                 {
12                     var folders = directory.GetDirectories();
13                     //遍历路径下文件夹
14                     foreach (var folder in folders)
15                     {
16                         treeModel = new zTreeModel();
17                         treeModel.pName = folder.Parent == null ? " " : folder.Parent.Name;
18                         treeModel.pFullName = folder.Parent == null ? " " : folder.Parent.FullName;
19                         treeModel.rootFullName = folder.Root.FullName;
20                         treeModel.name = folder.Name;
21                         treeModel.fullName = folder.FullName;
22                         treeModel.isParent = true;
23                         treeModelList.Add(treeModel);
24                     }
25 
26                 }
27                 catch (UnauthorizedAccessException ex)//调用方没有所要求的权限。
28                 {
29                     return null;
30                 }
31 
32                 //获取路径下文件 
33                 DirectoryInfo fileDirectory = new DirectoryInfo(path);
34                 
35                 try
36                 {
37                     var files = fileDirectory.GetFiles();
38                     foreach (var file in files)
39                     {
40                         treeModel = new zTreeModel();
41                         treeModel.pName = file.Directory == null ? "" : file.Directory.Name;
42                         treeModel.pFullName = file.DirectoryName;
43                         treeModel.rootFullName = file.Directory == null ? "" : file.Directory.Root.FullName;
44                         treeModel.name = file.Name;
45                         treeModel.fullName = file.FullName;
46                         treeModel.isFile = true;
47                         treeModelList.Add((treeModel));
48                     }
49 
50                 }
51                 catch (UnauthorizedAccessException ex) //调用方没有所要求的权限。
52                 {
53                     return null;
54                 }
55             }
56 
57             return treeModelList;
58 
59         }
View Code

相关文章:

  • 2021-06-19
  • 2021-12-23
  • 2021-12-03
  • 2021-12-03
猜你喜欢
  • 2022-12-23
  • 2021-05-15
  • 2022-12-23
  • 2021-06-27
  • 2021-12-03
相关资源
相似解决方案