磁盘目录结构,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 }