用递归的方法将树形结构生成文本并输出2013-04-20今天下午,吃饱了没事干,突然想写点什么,于是不由自主地想起了某件往事,当年在做XXX的时候好像有一个功能没有做出来。据说算法很复杂,当时就没有研究。不过,今天想到用递归的方法,把这个功能大致做出来了,虽然称不上完美,至少还是比较简单的,而且代码也不多,才几行。先给大家看看运行结果,如下图:

其实我说的这么神秘,也没什么,就是这个,把树形的目录结构输出到一个TXT文件中。其实当初的项目要求比这个更复杂,所以我当时没想到解决方法,不过,像上图这样,虽说远没有达标,不过,至少也不算很难看。原理就是通过递归的方式输出目录的名字,而目录前面的空格数量,是随着目录层次的加深同步累加,才做成这种缩进的效果。下面我贴一下代码。
/// <summary> /// 递归,枚举并输出所有子目录 /// </summary> /// <param name="path">父目录全路径</param> /// <param name="spacestr">空格字符串</param> /// <param name="sw">StreamWriter对象</param> void EnumDirectory(string path, string spacestr, StreamWriter sw) { DirectoryInfo dirInfo = new DirectoryInfo(path); var dirsubs = dirInfo.GetDirectories(); foreach (var d in dirsubs) { sw.WriteLine(spacestr + "=> " + d.Name); EnumDirectory(d.FullName, spacestr + " ", sw);} }
private void btnStart_Click(object sender, EventArgs e) { if (Directory.Exists(lblDisplayDir.Text)== false) { return; } // 把目录结构输出到文本文件 using (StreamWriter sw = File.CreateText("a.txt")) { DirectoryInfo di = new DirectoryInfo(lblDisplayDir.Text); sw.WriteLine(di.Name); foreach (var d in di.GetDirectories()) { EnumDirectory(d.FullName, " ", sw); } sw.Close(); } // 从文本文件中读出内容 if (File.Exists("a.txt")) { using (var sr = File.OpenText("a.txt")) { this.txtResult.Text = sr.ReadToEnd(); sr.Close(); } } }