读书人

将树形构造生成文本并输出

发布时间: 2013-04-09 16:45:09 作者: rapoo

将树形结构生成文本,并输出

今天下午,吃饱了没事干,突然想写点什么,于是不由自主地想起了某件往事,当年在做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();                }            }        }


源代码,我待会再上传。

读书人网 >编程

热点推荐