欢迎光临
我们一直在努力

C#实现的列出目录下所有子目录和文件的程序(附思路)-.NET教程,C#语言

建站超值云服务器,限时71元/月

把自己的资料刻录成很多光盘,发现连自己都很难找到需要的文件在哪张光盘上,因此我就根据需求,在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);

}

}

}

}

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » C#实现的列出目录下所有子目录和文件的程序(附思路)-.NET教程,C#语言
分享到: 更多 (0)

相关推荐

  • 暂无文章