C#實現的列出目錄下所有子目錄和檔案的程式(附思路)

來源:互聯網
上載者:User
程式 把自己的資料燒錄成很多光碟片,發現連自己都很難找到需要的檔案在哪張光碟片上,因此我就根據需求,在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);



}

}



}

}


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。