关于生成树型结构的文件关系图的算法
 在很多时候我们都希望生成树型结构的文件关系图:
我下面就讲述一下如何生成一个类似的关系,并生成文本文件.   
下面我们来重点讲一下如何遍历目录,如何生成图一的那种表现形式: 
SearchFile函数有2个参数,RootPath为查找位置,Indent控制输出的字符前面有多少空格,既缩进 
遍历用的是递归,深度越大字符前面的空格也就越多,并且要判断是目录还是文件,是目录的话要多加一 
个’ │’. 
每个文件的前面都有一个── 
│ ├─中国古典文学名著全书 
│ └─中共往事沉浮 
├─中国文学(一) 
│ ├─鲁迅全集 
│ ├─陈香梅文集 
│ ├─金庸全集 
│ ├─路遥文集 
│ ├─路翎文集 
│ ├─苏雪林文集 
│ ├─苏童文集 
│ ├─老舍文集 
│ ├─琼瑶全集 
│ ├─王朔文集 
│ ├─曾卓文文集 
│ ├─张爱玲文集 
│ ├─古龙全集 
│ ├─冰心全集 
│ ├─余华文集 
│ └─三毛散文全编 
└─linux 
 private void Search()
private void Search()  {
         {  this.lblState.Text = "正在输入
              this.lblState.Text = "正在输入 ";             //在界面上显示状态
";             //在界面上显示状态  this.Path = this.saveFileDialog1.FileName;
              this.Path = this.saveFileDialog1.FileName;  this.sw = new StreamWriter(this.Path,false);
              this.sw = new StreamWriter(this.Path,false);  
   //在文件第一行写入一个标题
              //在文件第一行写入一个标题  sw.WriteLine(this.txtPath.Text + "-------------------");                                this.SearchFile(this.txtPath.Text,"    │");
              sw.WriteLine(this.txtPath.Text + "-------------------");                                this.SearchFile(this.txtPath.Text,"    │");  this.sw.Close();
              this.sw.Close();  this.lblState.Text = "输出完毕!";
              this.lblState.Text = "输出完毕!";  }
         }  
   private void SearchFile(string RootPath,string Indent)
         private void SearchFile(string RootPath,string Indent)  {
         {  DirectoryInfo di = new DirectoryInfo(RootPath);
              DirectoryInfo di = new DirectoryInfo(RootPath);  FileInfo[] f = di.GetFiles();
              FileInfo[] f = di.GetFiles();  //迭代目录中的所有文件
              //迭代目录中的所有文件  foreach(FileInfo myFile in f)
              foreach(FileInfo myFile in f)  {
              {  sw.WriteLine(Indent);
                   sw.WriteLine(Indent);  //在文件名前+上一个’ ──’;
                   //在文件名前+上一个’ ──’;  sw.WriteLine(Indent + "──" + myFile.Name);
                   sw.WriteLine(Indent + "──" + myFile.Name);  }
              }  
   DirectoryInfo[] d = di.GetDirectories();
              DirectoryInfo[] d = di.GetDirectories();                //遍历目录中所有的子目录
              //遍历目录中所有的子目录  foreach(DirectoryInfo myDir in d)
              foreach(DirectoryInfo myDir in d)  {
              {  sw.WriteLine(Indent);
                   sw.WriteLine(Indent);  //在所有文件名前+上一个’ ──’;
                   //在所有文件名前+上一个’ ──’;  sw.WriteLine(Indent + "──" + myDir.FullName);
                   sw.WriteLine(Indent + "──" + myDir.FullName);  //递归调用SearchFile,并且第二个参数要比以前多了一个"   │",因为他是下一级//目录,应该比上一级多缩进一点
                    //递归调用SearchFile,并且第二个参数要比以前多了一个"   │",因为他是下一级//目录,应该比上一级多缩进一点  this.SearchFile(myDir.FullName,Indent + "   │");
                   this.SearchFile(myDir.FullName,Indent + "   │");  }
              }  }
         }  }
     }  }
}   整个程序就是这样,其实很简单,不过在文件名显示的缩进上要琢磨一下,这个程序,有一个地方不好,在文件的结尾并没有以
│          ├─bindconf 
│          └─authconfig 
├─21日学会 Linux 
│ ├─UNIX 
│ └─LINUX 
└─LINUX内核源代码情景分析 
 
                    
                 
 
          
               
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号