用递归方法实现读取文件夹下所有文件信息

要实现读取文件夹下所有文件信息,其实只要用个递归方法就可以简单实现了

下面为自定义的一个类其中的showEveryFile方法就是为读取给定文件夹下每一个文件

 

using System;
 using System.Collections.Generic;
 using System.Text;
 using System.IO;
 using System.Windows.Forms;
 namespace showFile
 {
     class showfileCls
     {
         public static void showErveryFile(string strFolderPath,ListView lstView)//定义静态的函数
         {
             try
             {
                 DirectoryInfo di = new DirectoryInfo(strFolderPath);//把文件夹定义为DirectoryInfo形式
                 FileSystemInfo[] fsinfo = di.GetFileSystemInfos();//获取此文件夹中的文件和文件夹的信息,返回一FileSystemInfo格式的数组
                 foreach (FileSystemInfo fs in fsinfo)//遍历数组
                 {
                     if (fs is FileInfo)//如果遍历到的为一文件
                     {
                         lstView.Items.Add(fs .FullName);
                         lstView.Items[lstView.Items.Count - 1].SubItems.Add(fs.Name.Remove (fs.Name .LastIndexOf ('.'),fs.Extension .Length ));
                         lstView.Items[lstView.Items.Count - 1].SubItems.Add(fs.Extension );
                         lstView.Items[lstView.Items.Count - 1].SubItems.Add(fs.CreationTime.ToShortDateString());
                     }
                     if (fs is DirectoryInfo)//如果遍历到的为文件夹
                     {
                         showErveryFile(fs.FullName, lstView);//递归方法
                     }
                 }
             }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.Message,"友情提示" ); 
            }
         }
     }
 }

定义了这个类之后就可以在按钮的Click事件中添加代码了

 

using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
 using System.Drawing;
 using System.Text;
 using System.Windows.Forms;
 namespace showFile
 {
     public partial class Form1 : Form
     {
         public Form1()
         {
             InitializeComponent();
         }
         public static bool boolSort = true;//全局的静态变量,用来设置点击列时候的排序方式
         private void Form1_Load(object sender, EventArgs e)
         {
             listView1.View = View.Details;//显示详细信息,这句很重要!!!
             listView1.AllowColumnReorder = true;//允许排列列的顺序
             listView1.FullRowSelect = true;//允许整行选择
             listView1.GridLines = true;//设置网格线
             listView1.Sorting = SortOrder.Ascending;//设置排序为正序排序
 
            //为列设置属性值
             listView1.Columns.Add("文件路径",100, HorizontalAlignment.Left);
             listView1.Columns.Add("文件名",100, HorizontalAlignment.Left);
             listView1.Columns.Add("文件格式",100, HorizontalAlignment.Left);
             listView1.Columns.Add("创建时间",100, HorizontalAlignment.Left );
         }
 
        private void btnBrowse_Click(object sender, EventArgs e)
         {
             string strPath = "";//文件路径
             if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)//如果选择了一路径,并且单击了“确定”按钮
             {
                 listView1.Items.Clear();//首先清空列表中的内容
                 strPath = folderBrowserDialog1.SelectedPath;//获取选择的文件路径名
                 txtPath.Text = strPath;//把文件路径在textbox中显示
                 showfileCls.showErveryFile(strPath, listView1);//由于定义的为静态函数,故不用实例化类
             }
         }
 
        private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
         {
             boolSort = !boolSort;//对此变量取反,以便每点击一次就按不同的方式排序
             if (boolSort)
             {
                 listView1.Sorting = SortOrder.Ascending;//正序
             }
             else
             {
                 listView1.Sorting = SortOrder.Descending;//倒序
             }
         }
     }
 }

最后的生成效果如图:

由图可知,系统不但显示了MathType文件夹根目录下的文件,还显示了其子文件夹Fonts及孙文件夹PostScript下的文件。

posted on 2014-08-22 10:14  记性特差  阅读(1058)  评论(0)    收藏  举报