关于生成树型结构的文件关系图的算法

时间:2022-03-21 22:03:03

关于生成树型结构的文件关系图的算法

 在很多时候我们都希望生成树型结构的文件关系图:
我下面就讲述一下如何生成一个类似的关系,并生成文本文件.   
下面我们来重点讲一下如何遍历目录,如何生成图一的那种表现形式:
SearchFile函数有2个参数,RootPath为查找位置,Indent控制输出的字符前面有多少空格,既缩进
遍历用的是递归,深度越大字符前面的空格也就越多,并且要判断是目录还是文件,是目录的话要多加一
.
每个文件的前面都有一个──

│ ├─中国古典文学名著全书
│ └─*往事沉浮
├─中国文学(一)
│ ├─鲁迅全集
│ ├─陈香梅文集
│ ├─金庸全集
│ ├─路遥文集
│ ├─路翎文集
│ ├─苏雪林文集
│ ├─苏童文集
│ ├─老舍文集
│ ├─琼瑶全集
│ ├─王朔文集
│ ├─曾卓文文集
│ ├─张爱玲文集
│ ├─古龙全集
│ ├─冰心全集
│ ├─余华文集
│ └─三毛散文全编
└─linux

关于生成树型结构的文件关系图的算法private   void  Search() 
关于生成树型结构的文件关系图的算法关于生成树型结构的文件关系图的算法         

关于生成树型结构的文件关系图的算法              
this.lblState.Text = "正在输入关于生成树型结构的文件关系图的算法";             //在界面上显示状态 
关于生成树型结构的文件关系图的算法
              this.Path = this.saveFileDialog1.FileName; 
关于生成树型结构的文件关系图的算法              
this.sw = new StreamWriter(this.Path,false); 
关于生成树型结构的文件关系图的算法  
关于生成树型结构的文件关系图的算法              
//在文件第一行写入一个标题 
关于生成树型结构的文件关系图的算法
              sw.WriteLine(this.txtPath.Text + "-------------------");                                this.SearchFile(this.txtPath.Text,"    │"); 
关于生成树型结构的文件关系图的算法              
this.sw.Close(); 
关于生成树型结构的文件关系图的算法              
this.lblState.Text = "输出完毕!"
关于生成树型结构的文件关系图的算法         }
 
关于生成树型结构的文件关系图的算法  
关于生成树型结构的文件关系图的算法         
private   void  SearchFile( string  RootPath, string  Indent) 
关于生成树型结构的文件关系图的算法关于生成树型结构的文件关系图的算法         

关于生成树型结构的文件关系图的算法              DirectoryInfo di 
= new DirectoryInfo(RootPath); 
关于生成树型结构的文件关系图的算法              FileInfo[] f 
= di.GetFiles(); 
关于生成树型结构的文件关系图的算法              
//迭代目录中的所有文件 
关于生成树型结构的文件关系图的算法
              foreach(FileInfo myFile in f) 
关于生成树型结构的文件关系图的算法关于生成树型结构的文件关系图的算法              

关于生成树型结构的文件关系图的算法                   sw.WriteLine(Indent); 
关于生成树型结构的文件关系图的算法                   
//在文件名前+上一个’ ──’; 
关于生成树型结构的文件关系图的算法
                   sw.WriteLine(Indent + "──" + myFile.Name); 
关于生成树型结构的文件关系图的算法              }
 
关于生成树型结构的文件关系图的算法  
关于生成树型结构的文件关系图的算法              DirectoryInfo[] d 
= di.GetDirectories();               
关于生成树型结构的文件关系图的算法              
//遍历目录中所有的子目录 
关于生成树型结构的文件关系图的算法
              foreach(DirectoryInfo myDir in d) 
关于生成树型结构的文件关系图的算法关于生成树型结构的文件关系图的算法              

关于生成树型结构的文件关系图的算法                   sw.WriteLine(Indent); 
关于生成树型结构的文件关系图的算法                   
//在所有文件名前+上一个’ ──’; 
关于生成树型结构的文件关系图的算法
                   sw.WriteLine(Indent + "──" + myDir.FullName); 
关于生成树型结构的文件关系图的算法                    
//递归调用SearchFile,并且第二个参数要比以前多了一个"   │",因为他是下一级//目录,应该比上一级多缩进一点 
关于生成树型结构的文件关系图的算法
                   this.SearchFile(myDir.FullName,Indent + "   │"); 
关于生成树型结构的文件关系图的算法              }
 
关于生成树型结构的文件关系图的算法         }
 
关于生成树型结构的文件关系图的算法     } 
关于生成树型结构的文件关系图的算法}   

整个程序就是这样,其实很简单,不过在文件名显示的缩进上要琢磨一下,这个程序,有一个地方不好,在文件的结尾并没有以

          ├─bindconf 
          └─authconfig 
├─21日学会 Linux
│ ├─UNIX 
│ └─LINUX
└─LINUX内核源代码情景分析

这种形式结尾,而都是直接 | 收工,这个问题我一直都没有好的方法来解决,如果大家有好的算法还请给出来.