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