关于生成树型结构的文件关系图的算法
在很多时候我们都希望生成树型结构的文件关系图:
我下面就讲述一下如何生成一个类似的关系,并生成文本文件.
下面我们来重点讲一下如何遍历目录,如何生成图一的那种表现形式:
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 + " │");
}
}
}
}
{
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内核源代码情景分析