用递归方法实现读取文件夹下所有文件信息
要实现读取文件夹下所有文件信息,其实只要用个递归方法就可以简单实现了
下面为自定义的一个类其中的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下的文件。