把自己的資料刻錄成很多光盤,發現連自己都很難找到需要的文件在哪張光盤上,因此我就根據需求,在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 ) // 是文件
{