C#实现的列出目录下所有子目录和文件的程序(附思路)
2024-07-21 02:25:06
供稿:网友
 
把自己的资料刻录成很多光盘,发现连自己都很难找到需要的文件在哪张光盘上,因此我就根据需求,在visual studio.net中写了一个列出目录下所有子目录和文件的程序,以方便我列出刻录的资料光盘上的所有文件信息。
本程序的主要算法是递归,主函数如下:
//递归列出目录下的所有文件和子目录
 public void listfiles( filesysteminfo fileinfo )
 {
 if( ! fileinfo.exists ) return;
 directoryinfo dirinfo = fileinfo as directoryinfo;
 if( dirinfo == null ) return; //不是目录
 indent++;//缩进加一
 filesysteminfo [] files = dirinfo.getfilesysteminfos();
 for( int i=0; i遍历目录下所有文件、子目录
 {
 fileinfo file = files[i] as fileinfo;
 if( file != null ) // 是文件
 {
 this.richtextbox1.text+=(writespace(indent)+"|-"+ 
 file.name + "/t" + converttokbyte(file.length)+"/r" );
 }
 else //是目录
 {
 this.richtextbox1.text+=(writespace(indent)+"+"+files[i].fullname+"/r");
 listfiles( files[i] ); //对子目录进行递归调用
 }
 }
 indent--;//缩进减一
 }
程序的设计界面如下图所示:
控件有两个button控件btnselect和btnsave(分别用来选择目录和保存文件);一个richtextbox控件(显示结果),一个folderbrowserdialog控件(选择目录)和一个savefiledialog控件(选择保存文件路径)。
程序运行后的界面如下图所示:
 
 
程序的完整代码如下:(其中红色的是我自己添加的)
using system;
using system.drawing;
using system.collections;
using system.componentmodel;
using system.windows.forms;
using system.data;
using system.globalization;
using system.io;
 
namespace listfile_windows
{
 /// 
 /// form1 的摘要说明。
 /// 
 public class form1 : system.windows.forms.form
 {
 private system.windows.forms.richtextbox richtextbox1;
 public static int indent; //缩进值
 private system.windows.forms.button btnselect;
 private system.windows.forms.button btnsave;
 private system.windows.forms.folderbrowserdialog folderbrowserdialog1;
 private system.windows.forms.savefiledialog savefiledialog1;
 /// 
 /// 必需的设计器变量。
 /// 
 private system.componentmodel.container components = null;
 
 public form1()
 {
 //
 // windows 窗体设计器支持所必需的
 //
 initializecomponent();
 
 //
 // todo: 在 initializecomponent 调用后添加任何构造函数代码
 //
 }
 
 /// 
 /// 清理所有正在使用的资源。
 /// 
 protected override void dispose( bool disposing )
 {
 if( disposing )
 {
 if (components != null) 
 {
 components.dispose();
 }
 }
 base.dispose( disposing );
 }
 
 #region windows 窗体设计器生成的代码
  /// 
 /// 设计器支持所需的方法 - 不要使用代码编辑器修改
 /// 此方法的内容。
 /// 
 private void initializecomponent()
 {
 this.richtextbox1 = new system.windows.forms.richtextbox();
 this.btnselect = new system.windows.forms.button();
 this.btnsave = new system.windows.forms.button();
 this.folderbrowserdialog1 = new system.windows.forms.folderbrowserdialog();
 this.savefiledialog1 = new system.windows.forms.savefiledialog();
 this.suspendlayout();
 // 
 // richtextbox1
 // 
 this.richtextbox1.location = new system.drawing.point(0, 0);
 this.richtextbox1.name = "richtextbox1";
 this.richtextbox1.size = new system.drawing.size(528, 400);
 this.richtextbox1.tabindex = 0;
 this.richtextbox1.text = "";
 // 
 // btnselect
 // 
 this.btnselect.location = new system.drawing.point(112, 424);
 this.btnselect.name = "btnselect";
 this.btnselect.tabindex = 1;
 this.btnselect.text = "选择目录";
 this.btnselect.click += new system.eventhandler(this.btnselect_click);
 // 
 // btnsave
 // 
 this.btnsave.location = new system.drawing.point(320, 424);
 this.btnsave.name = "btnsave";
 this.btnsave.tabindex = 2;
 this.btnsave.text = "保存文件";
 this.btnsave.click += new system.eventhandler(this.btnsave_click);
 // 
 // form1
 // 
 this.autoscalebasesize = new system.drawing.size(6, 14);
 this.clientsize = new system.drawing.size(528, 461);
 this.controls.add(this.btnsave);
 this.controls.add(this.btnselect);
 this.controls.add(this.richtextbox1);
 this.name = "form1";
 this.text = "form1";
 this.resumelayout(false);
 
 }
 #endregion
 
 /// 
 /// 应用程序的主入口点。
 /// 
 [stathread]
 static void main() 
 {
 application.run(new form1());
 }
 
 //递归列出目录下的所有文件和子目录
 public void listfiles( filesysteminfo fileinfo )
 {
 if( ! fileinfo.exists ) return;
 directoryinfo dirinfo = fileinfo as directoryinfo;
 if( dirinfo == null ) return; //不是目录
 indent++;//缩进加一
 filesysteminfo [] files = dirinfo.getfilesysteminfos();
 for( int i=0; i遍历目录下所有文件、子目录
 {
 fileinfo file = files[i] as fileinfo;
 if( file != null ) // 是文件
 {
 this.richtextbox1.text+=(writespace(indent)+"|-"+ 
 file.name + "/t" + converttokbyte(file.length)+"/r" );
 }
 else //是目录
 {
 this.richtextbox1.text+=(writespace(indent)+"+"+files[i].fullname+"/r");
 listfiles( files[i] ); //对子目录进行递归调用
 }
 }
 indent--;//缩进减一
 }
  
 //控制缩进空格,n为空格数
 public string writespace(int n)
 {
 string strspace="";
 for(int i=1;i<=n;i++)
 strspace+=" ";
 return strspace;
 }
 
 //显示文件字节数
 public string converttokbyte(long len)
 {
 float val;
 numberformatinfo mynfi = new numberformatinfo();
 mynfi.numberdecimaldigits=1; //显示一位小数
 
 if(len/1024==0)
 return len.tostring()+"字节";
 if(len/1024/1024==0)
 {
 val=(float)len/1024;
 return val.tostring("n",mynfi)+"k字节";
 }
 val=(float)len/1024/1024;
 return val.tostring("n",mynfi)+"m字节";
 
 }
 
 private void btnselect_click(object sender, system.eventargs e)
 {
 indent=0;//缩进清零
 this.richtextbox1.resettext(); //清空文本框中的原来的文本
//选择目录
 if(this.folderbrowserdialog1.showdialog()==dialogresult.ok)
 {
 listfiles(new directoryinfo(this.folderbrowserdialog1.selectedpath));
 }
 }
 
 private void btnsave_click(object sender, system.eventargs e)
 {
 if(this.savefiledialog1.showdialog()==dialogresult.ok)
 {
 //保存结果文件
 this.richtextbox1.savefile(savefiledialog1.filename,richtextboxstreamtype.plaintext);
 
 }
 }
 
 }
} 
网站运营seo文章大全提供全面的站长运营经验及seo技术!