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

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

下面为自定义的一个其中的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 @ 2009-03-16 20:23  爱生活,爱GIS  阅读(2655)  评论(0编辑  收藏  举报