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技術!