C#实现的列出目录下所有子目录和文件的程序(附思路)

原创 2004年09月02日 09:47:00

把自己的资料刻录成很多光盘,发现连自己都很难找到需要的文件在哪张光盘上,因此我就根据需求,在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控件btnSelectbtnSave(分别用来选择目录和保存文件);一个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);

                           

                            }

                   }

 

         }

}

Python:编写函数,能在当前目录以及子目录下查找文件名包含指定字符串的文件,并打印出完整路径

绝对路径问题参考链接: http://www.newsmth.net/nForum/#!article/Python/69506 os模块参考链接: http://www.educity...
  • u012599619
  • u012599619
  • 2015年05月15日 10:49
  • 2865

Linux C 编程之遍历子目录及所有文件

转载自:http://blog.csdn.net/jeff_nie/article/details/8464900 遍历子目录用的方法是递归调用,先判断子目录流指针所指向的文件是否为目录文件...
  • qq_16209077
  • qq_16209077
  • 2016年07月20日 23:35
  • 15466

在linux下用C语言实现递归查看某个目录中的所有文件

在看APUE的时候看到有个程序就是
  • u012291393
  • u012291393
  • 2014年11月16日 10:06
  • 1775

C#获取指定目录包含的文件和子目录

如何获取指定目录包含的文件和子目录     1. DirectoryInfo.GetFiles():获取目录中(不包含子目录)的文件,返回类型为FileInfo[],支持通配符查找;     2....
  • Mr_Data_Mining
  • Mr_Data_Mining
  • 2013年03月01日 13:50
  • 955

C#获取目录及子目录文件名,文件流写入txt

最近工作中需要大批量将文件中的名字录入到Excel 借用写程序减少重复的人工..特此分享 /// /// 点击事件激活选择文件夹 /// ...
  • sinat_35416456
  • sinat_35416456
  • 2017年06月14日 16:29
  • 114

C#遍历某目录及其子目录下所有文件的一个例子

问题源于游戏汉化,由于要对汉化文本做某一种批处理,而这些文本集中在某一目录及其各层子目录中,于是如何遍历就成为了一个问题。 直接上代码,不过多解释了,只看checkFiles函数就行,其他和遍历没关...
  • zixiaomuwu
  • zixiaomuwu
  • 2016年04月11日 23:08
  • 615

写的一个读取指定目录下的所有文件和子目录的程序

前不久给一搞前端开发的同事写的一个程序,功能挺简单:将指定目录中的所有文件和目录的相对路径输入到指定的文本文件,具体代码如下: /** * 参数0:要扫描的目录,参数1:输出到的文件 * @...
  • jakey766
  • jakey766
  • 2012年01月31日 17:51
  • 1334

C#文件操作,父目录,子目录,所有文件、文件夹,属性信息

  下面代码主要参考了C#高级编程第六版的源码部分改写增加了中文注释,using System;using System.IO;using System.Windows.Forms;namespace...
  • goodnew
  • goodnew
  • 2011年03月25日 19:27
  • 6101

java程序 一次改变指定目录下所有文件编码(包括子目录中的文件)

1.此程序为java语言所写的批量转码,作用是一次性把指定文件夹下的文件的编码全部转为自己需要的编码,包括其子目录中的文件。 2.有时候我们需要给一个文件夹的文件批量转码,用到此程序,可以节省很多时间...
  • Mr_duantao
  • Mr_duantao
  • 2016年02月01日 13:23
  • 1035

二、列出指定目录下的文件(包括子目录)

当File对象指向一个目录时,可以通过File对象来获取目录下的文件信息。     1、File类的list方法返回该目录下所有文件(包括目录)的文件名,文件名不包含路径信息。     2、Fil...
  • TFFITS
  • TFFITS
  • 2012年04月23日 18:26
  • 1859
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#实现的列出目录下所有子目录和文件的程序(附思路)
举报原因:
原因补充:

(最多只允许输入30个字)