磁盘目录结构,TreeView

       Description:获取磁盘目录的结构,树行现实与TreeView上..

1.

 1 /// <summary>
 2         /// 初始化驱动器
 3         /// </summary>
 4         /// <param name="treeView">tv控件句柄</param>
 5         public static void InitDrive(TreeView treeView)
 6         {
 7             var drives = DriveInfo.GetDrives();
 8             foreach (var drive in drives)
 9             {
10                 if (drive.IsReady)
11                 {
12                     var s = new DirectorySecurity(drive.Name, AccessControlSections.Access);
13                     if (!s.AreAuditRulesProtected)
14                     {
15                         var node = new TreeNode(drive.Name) { Tag = new NodeTag(drive.Name, false) };
16                         treeView.Nodes.Add(node);
17                         CreateChildNodes(node);
18                     }
19                 }
20             }
21         }

DriveInfo.GetDrives 获取逻辑驱动器名称. 逻辑驱动器一般说是硬盘的若干个分区,其实在逻辑上这些分区在一块硬盘上. so
DirectorySecurity  目录的访问控制和审核安全. 看看有没有权限操作它等.

 

2.

 1         /// <summary>
 2         /// 加载字节点
 3         /// </summary>
 4         /// <param name="treeNode">父节点</param>
 5         public static void CreateChildNodes(TreeNode treeNode)
 6         {
 7             var nodeTag = (NodeTag)treeNode.Tag;
 8             if (nodeTag.HasInited) return;
 9             try
10             {
11                 var dirs = Directory.GetDirectories(nodeTag.Path, "*", SearchOption.TopDirectoryOnly);
12                 if (dirs.Length == 0)
13                 {
14                     nodeTag.HasInited = true;
15                     return;
16                 }
17                 foreach (var dir in dirs)
18                 {
19                     DirectoryInfo d = new DirectoryInfo(dir);
20                     if ((d.Attributes & FileAttributes.Hidden) != FileAttributes.Hidden)
21                     {
22                         var childNode = new TreeNode(Path.GetFileName(dir)) { Tag = new NodeTag(dir, false) };
23                         treeNode.Nodes.Add(childNode);
24                     }
25                 }
26             }
27             catch
28             {
29                 nodeTag.HasInited = true;
30                 return;
31             }
32 
33             nodeTag.HasInited = true;
34         }

   3.

 1  /// <summary>
 2         /// 当展开节点时候,在向下加载俩层
 3         /// </summary>
 4         /// <param name="pNode">当前选中节点</param>
 5         public static void ExpandChildNodes(TreeNode pNode)
 6         {
 7             TreeNodeCollection treeNodeCollection = pNode.Nodes;
 8             if (treeNodeCollection.Count == 0)
 9             {
10                 return;
11             }
12             foreach (TreeNode treeNode in treeNodeCollection)
13             {
14                 CreateChildNodes(treeNode);
15             }
16         }

4.

 1  /// <summary>
 2         /// 加载文件
 3         /// </summary>
 4         /// <param name="fileNode">当前选中节点</param>
 5         /// <param name="listBox">lb句柄</param>
 6         public static void LoadFile(TreeNode fileNode,ListBox listBox)
 7         {
 8             listBox.Items.Clear();
 9             var files = Directory.GetFiles(fileNode.FullPath, "*.*", SearchOption.TopDirectoryOnly);
10             if (files.Length == 0)
11             {
12                 return;
13             }
14             foreach (var file in files)
15             {
16                 listBox.Items.Add(Path.GetFileName(file));
17             }
18         }

 

posted @ 2014-12-02 15:34  db丶  阅读(164)  评论(0编辑  收藏  举报