把自己的资料刻录成很多光盘,发现连自己都很难找到需要的文件在哪张光盘上,因此我就根据需求,在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< 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< 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);
}
}
}
}
作者blog:http://blog.csdn.net/fanz2000/
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器