解决方案:
小总结:
用IO流,的file,DirectoryInfo的方法绑定Treeview控件上和删除,读取,
可以熟练掌握一下IO流
主页面:
1 private void Form1_Load(object sender, EventArgs e) 2 { 3 4 //创建一个根节点 5 TreeNode root = new TreeNode(); 6 root.Text = "D:\\"; //显示的是文件夹名称(单独名称) 7 root.Tag = "D:\\"; //保存文件夹的绝对路径 8 9 tvExplore.Nodes.Add(root); 10 11 12 //加载d盘下的所有子文件夹 13 14 //01.在左边的TreeView控件上加载D盘下所有的文件 15 //02.在TreeView只显示文件夹 16 //03.选中节点的文件在右边ListView中显示 17 18 } 19 20 private string path; 21 private DirectoryInfo info; 22 23 public void LoadDirectory(TreeNode selectNode) 24 { 25 selectNode.Nodes.Clear(); 26 //02.加载该路径下(selectNode.Tag.ToString())所有的文件夹 27 path = selectNode.Tag.ToString(); 28 info = new DirectoryInfo(path); 29 DirectoryInfo[] directorys = info.GetDirectories(); 30 foreach (DirectoryInfo directoryInfo in directorys) 31 { 32 //每遍历到一个DirectoryInfo对象,就在TreeView上创建一个节点 33 TreeNode tn = new TreeNode(); 34 tn.Text = directoryInfo.Name; 35 tn.Tag = directoryInfo.FullName; 36 37 selectNode.Nodes.Add(tn); 38 } 39 } 40
![](https://images0.cnblogs.com/blog2015/773171/201507/172326264541863.png)
41 //加载所有文件 42 public void LoadALlFiles() 43 { 44 lvFiles.Items.Clear(); 45 //03.加载当前选中节点下的所有文件 46 FileInfo[] files = info.GetFiles(); 47 foreach (FileInfo file in files) 48 { 49 //每遍历到一个file对象,形成ListView上的一条记录 50 ListViewItem lvitem = new ListViewItem(file.Name); 51 lvitem.SubItems.Add(file.Length*1.0/1024/1024 + "MB"); //文件大小 52 //文件类型(扩展名) 53 lvitem.SubItems.Add(file.Extension); 54 //文件路径 55 lvitem.SubItems.Add(file.FullName); 56 lvFiles.Items.Add(lvitem); 57 } 58 } 59 60 private void tvExplore_AfterSelect(object sender, TreeViewEventArgs e) 61 { 62 //01.获取选中的节点对象 63 TreeNode selectNode = tvExplore.SelectedNode; 64 //02.加载当前节点的文件夹 65 LoadDirectory(selectNode); 66 LoadALlFiles(); 67 } 68 69 private void lvFiles_DoubleClick(object sender, EventArgs e) 70 { 71 //获取选中文件的路径列 72 string path = lvFiles.SelectedItems[0].SubItems[3].Text; 73 Process.Start(path); 74 } 75 76 private void button1_Click(object sender, EventArgs e) 77 { 78 79 } 80 81 private void tisiCopy_Click(object sender, EventArgs e) 82 { 83 //获取用户选中的tv中的节点 84 TreeNode selectNode=tvExplore.SelectedNode; 85 string path=selectNode.Tag.ToString(); 86 DialogResult dr=folderBrowserDialog1.ShowDialog(); 87 if (dr==DialogResult.OK) 88 { 89 CopyDirectory(path,folderBrowserDialog1.SelectedPath); 90 } 91 }92 //点击树状结构复制文件夹 93 /// <summary> 94 /// 95 /// </summary> 96 /// <param name="srcdir">源路径</param> 97 /// <param name="desdir">目标路径</param> 98 private void CopyDirectory(string srcdir, string desdir) 99 { 100 //D:\\美图 101 string folderName = srcdir.Substring(srcdir.LastIndexOf("\\") + 1); 102 103 string desfolderdir = desdir + "\\" + folderName; 104 105 if (desdir.LastIndexOf("\\") == (desdir.Length - 1)) 106 { 107 desfolderdir = desdir + folderName; 108 } 109 string[] filenames = Directory.GetFileSystemEntries(srcdir); 110 111 foreach (string file in filenames)// 遍历所有的文件和目录 112 { 113 if (Directory.Exists(file))// 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件 114 { 115 116 string currentdir = desfolderdir + "\\" + file.Substring(file.LastIndexOf("\\") + 1); 117 if (!Directory.Exists(currentdir)) 118 { 119 Directory.CreateDirectory(currentdir); 120 } 121 122 CopyDirectory(file, desfolderdir); 123 } 124 125 else // 否则直接copy文件 126 { 127 string srcfileName = file.Substring(file.LastIndexOf("\\") + 1); 128 129 srcfileName = desfolderdir + "\\" + srcfileName; 130 131 132 if (!Directory.Exists(desfolderdir)) 133 { 134 Directory.CreateDirectory(desfolderdir); 135 } 136 137 138 File.Copy(file, srcfileName); 139 } 140 }//foreach 141 }
完结待续………………………………