C#遍历文件夹的3种方法(附带实例)
C#程序中遍历文件夹,可以使用 DirectoryInfo 类提供的 GetDirectories() 方法、GetFiles() 方法和 GetFileSystemInfos() 方法实现,下面分别对这3个方法进行详细讲解。
一般遍历文件夹时都会使用 GetFileSystemInfos() 方法,因为 GetDirectories() 方法只遍历文件夹中的子文件夹,GetFiles() 方法只遍历文件夹中的文件,而 GetFileSystemInfos() 方法遍历文件夹中的所有子文件夹及文件。
【实例】获取文件夹中的所有子文件夹及文件信息。程序开发步骤如下:
1) 新建一个 Windows 应用程序,默认窗体为 Form1.cs。
2) 在 Form1 窗体中,添加一个 FolderBrowserDialog 控件、一个 TextBox 控件、一个 Button 控件和一个 ListView 控件:
双击触发 Button 控件的 Click 事件,在该事件中,首先使用 DirectoryInfo 对象的 GetFileSyste mInfos() 方法获取指定文件夹下所有的子文件夹及文件,然后将获取到的信息显示在 ListView 列表中。代码如下:
C# GetDirectories()方法
用来返回当前目录的子目录。该方法为可重载方法,具有以下 3 种重载形式:public DirectoryInfo[] GetDirectories() public DirectoryInfo[] GetDirectories(string searchPattern) public DirectoryInfo[] GetDirectories(string searchPattern, SearchOption searchOption)
- searchPattern:搜索字符串,如用于搜索所有以单词 System 开头的目录的“System*”。
- searchOption:SearchOption 枚举的一个值,指定搜索操作是应仅包含当前目录还是应包含所有的子目录。
- 返回值:第一种重载形式的返回值为 DirectoryInfo 对象的数组;第二种和第三种重载形式的返回值为与 searchPattern 匹配的 DirectoryInfo 类型的数组。
C# GetFiles()方法
返回当前目录的文件列表。该方法为可重载方法,具有以下 3 种重载形式:public FileInfo[] GetFiles() public FileInfo[] GetFiles(string searchPattern) public FileInfo[] GetFiles(string searchPattern, SearchOption searchOption)
- searchPattern:搜索字符串(如“*.txt”)。
- searchOption:searchOption 枚举的一个值,指定搜索操作是应仅包含当前目录还是应包含所有的子目录。
- 返回值:FileInfo 类型数组。
C# GetFileSystemInfos()方法
检索表示当前目录的文件和子目录的强类型 FileSystemInfo 对象的数组。该方法为可重载方法,具有以下两种重载形式:public FileSystemInfo[] GetFileSystemInfos() public FileSystemInfo[] GetFileSystemInfos(string searchPattern)
- searchPattern:搜索字符串。
- 返回值:第一种重载形式的返回值为强类型 FileSystemInfo 项的数组;第二种重载形式的返回值为与搜索条件匹配的强类型 FileSystemInfo 对象的数组。
一般遍历文件夹时都会使用 GetFileSystemInfos() 方法,因为 GetDirectories() 方法只遍历文件夹中的子文件夹,GetFiles() 方法只遍历文件夹中的文件,而 GetFileSystemInfos() 方法遍历文件夹中的所有子文件夹及文件。
【实例】获取文件夹中的所有子文件夹及文件信息。程序开发步骤如下:
1) 新建一个 Windows 应用程序,默认窗体为 Form1.cs。
2) 在 Form1 窗体中,添加一个 FolderBrowserDialog 控件、一个 TextBox 控件、一个 Button 控件和一个 ListView 控件:
- FolderBrowserDialog 控件用来显示“浏览文件夹”对话框;
- TextBox 控件用来显示选择的文件夹路径及名称;
- Button 控件用来打开“浏览文件夹”对话框并获取所选文件夹中的子文件夹及文件;
- ListView 控件用来显示选择的文件夹中的子文件夹及文件信息。
双击触发 Button 控件的 Click 事件,在该事件中,首先使用 DirectoryInfo 对象的 GetFileSyste mInfos() 方法获取指定文件夹下所有的子文件夹及文件,然后将获取到的信息显示在 ListView 列表中。代码如下:
private void button1_Click(object sender, EventArgs e) { listView1.Items.Clear(); if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) { textBox1.Text = folderBrowserDialog1.SelectedPath; // 创建 DirectoryInfo 对象 DirectoryInfo dinfo = new DirectoryInfo(textBox1.Text); // 获取指定目录下的所有子目录及文件类型 FileSystemInfo[] fsinfos = dinfo.GetFileSystemInfos(); foreach (FileSystemInfo fsinfo in fsinfos) { if (fsinfo is DirectoryInfo) // 判断是否是文件夹 { // 使用获取的文件夹名称实例化 DirectoryInfo 对象 DirectoryInfo dirinfo = new DirectoryInfo(fsinfo.FullName); // 为 ListView 控件添加文件夹信息 listView1.Items.Add(dirinfo.Name); listView1.Items[listView1.Items.Count - 1].SubItems.Add(dirinfo.FullName); listView1.Items[listView1.Items.Count - 1].SubItems.Add(""); listView1.Items[listView1.Items.Count - 1].SubItems.Add(dirinfo.CreationTime.ToShortDateString()); } else { // 使用获取的文件名称实例化 FileInfo 对象 FileInfo finfo = new FileInfo(fsinfo.FullName); // 为 ListView 控件添加文件信息 listView1.Items.Add(finfo.Name); listView1.Items[listView1.Items.Count - 1].SubItems.Add(finfo.FullName); listView1.Items[listView1.Items.Count - 1].SubItems.Add(finfo.Length.ToString()); listView1.Items[listView1.Items.Count - 1].SubItems.Add(finfo.CreationTime.ToShortDateString()); } } } }运行程序,单击“浏览”按钮,弹出“浏览文件夹”对话框;选择文件夹,单击“确定”按钮,将选择的文件夹中所包含的子文件夹及文件信息显示在 ListView 控件中。