C# IO操作(五)文件的递归加载
本篇是一个案例,其核心通过代码展示代码中的递归这个用法,程序的界面如下:
当点击“加载”按钮时,根据路径中的地址,加载该文件夹下所有的子文件夹和子文件,代码如下:
1 private void BtnLoad_Click(object sender, EventArgs e) 2 { 3 string sPath = txtPath.Text.Trim(); 4 LoadDirAndFile(sPath, tvList.Nodes); 5 } 6 7 private void LoadDirAndFile(string sPath, TreeNodeCollection treeNodeCollection) 8 { 9 string strDir = sPath.Substring(sPath.LastIndexOf(@"\") + 1); 10 TreeNode tNode = treeNodeCollection.Add(strDir); 11 12 //加载所有目录 13 string[] strDir1 = Directory.GetDirectories(sPath); 14 foreach (string item in strDir1) 15 { 16 //返回目录的最后一级(名称) 17 string sDir = item.Substring(item.LastIndexOf(@"\") + 1); 18 TreeNode tNode1 = tNode.Nodes.Add(sDir); 19 LoadDirAndFile(item, tNode1.Nodes); //递归加载 20 } 21 22 string[] strFiles = Directory.GetFiles(sPath, "*.txt"); 23 foreach (string item in strFiles) 24 { 25 TreeNode tNodeFile = treeNodeCollection.Add(Path.GetFileName(item)); 26 tNodeFile.Tag = item; 27 } 28 } 29 30 private void tvList_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) 31 { 32 if (e.Node.Tag!=null) 33 { 34 //文件节点 35 txtContent.Text = File.ReadAllText(e.Node.Tag.ToString(), Encoding.Default); 36 } 37 }
总结:
1.加载文件夹节点时,要考虑到文件夹下还有可能有子文件夹和子文件,所以要使用递归加载;
2.在实现点击文件节点,要在右边的文本框中查看文本文件全部的内容,就在递归加载文件夹和文件时,为所有的文件节点加了tag属性,后面双击节点时,只要tag属性不为空即为文件节点(读取即可),而为空的则是文件夹节点(不需要处理)。