您的位置:首页 > 其它

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

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


源代码,我待会再上传。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: