上回书说到了判断文件夹是否存在、创建文件夹和移动文件夹。欲知后事如何,且听下面分解。
04 删除文件夹
删除文件夹可以使用 Directory 类的 Delete 方法或者 DirectoryInfo 类的 Delete 方法来实现,下面分别对它们进行介绍。
1. Directory 类的 Delete 方法
该方法为可重载方法,它有以下两种重载形式:
public static void Delete(string path)
public static void Delete(string path,bool recursive)
path:要移除的空目录/目录的名称。
recursive:若要移除 path 中的目录、子目录和文件,则为 true;否则为 false。
例7
下面的代码调用 Directory 类的 Delete 方法删除 C 盘根目录下的 Test 文件夹。
Directory.Delete("C:\\Test");
2. DirectoryInfo 类的 Delete 方法
该方法是指永久删除文件,语法如下:
public override void Delete()
public void Delete(bool recursive)
recursive:若为 true;则删除该目录、其子目录以及所有文件;否则为 false。
说明
第一种重载形式,如果 DirectoryInfo 为空,则删除它。第二种重载形式,删除 DirectoryInfo 对象,并指定是否要删除子目录和文件。
例8
下面的代码首先实例化一个 DirectoryInfo 对象,然后使用该对象调用 DirectoryInfo 类的 Delete 方法删除 C 盘根目录下的 Test 文件夹。
DirectoryInfo dinfo = new DirectoryInfo("C:\\Test");
dinfo.Delete();
05 遍历文件夹
遍历文件夹时,可以分别使用 DirectoryInfo 类提供的 GetDirectories 方法、GetFiles 方法和 GetFileSystemInfos 方法。下面对这 3 个方法进行详细讲解。
1. GetDirectories 方法
该方法用来返回当前目录的子目录。该方法为可重载方法,它有以下 3 种重载形式:
public DirectoryInfo[] GetDirectories()
public DirectoryInfo[] GetDirectories(string searchPattern)
public DirectoryInfo[] GetDirectories(string searchPattern,SearchOption searchOption)
searchPattern:搜索字符串,如用于搜索所有以单词 System 开头的目录的 “ Syatem ”
searchOption:SearchOption 枚举的一个值,指定搜索操作是应仅包含当前目录还是应包含所有子目录。
返回值:第一种重载形式的返回值为 DirectoryInfo 对象的数组。第二种和第三种重载形式的返回值与 searchPattern 匹配的 DirectoryInfo 类型的数组。
2. GetFiles 方法
该方法返回当前目录的文件列表。该方法为可重载方法,它有以下 3 种重载形式:
public FileInfo[ ] GetFiles()
public FileInfo[ ] GetFiles(string searchPattern)
public FileInfo[ ] GetFiles(string searchPattern,SearchOption searchOption)
searchOption:搜索字符串(如 “ *.txt ”)。
searchOption:SearchOption 枚举的一个值,指定搜索操作是应仅包含当前目录还是应包含所有子目录。
返回值:FileInfo 类型数组。
3. GetFileSystemInfos 方法
该方法返回表示某个目录中所有文件和子目录的 FileSystemInfo 类型数组。该方法为可重载方法,有以下两种重载形式:
public FileSystemInfo[ ] GetFileSystemInfos()
public FileSystemInfo[] GetFileSystemInfos(string searchPattern)
searchPattern:搜索字符串。
返回值:第一种重载形式的返回值为 FileSystemInfo 项的数组。第二种重载形式的返回值为与搜索条件匹配的 FileSystemInfo 对象的数组。
说明
一般遍历文件夹时,都使用 GetFileSystemInfos 方法,因为 GetDirectories 方式只遍历文件夹中的子文件夹,GetFiles 方法只遍历文件夹中的文件,而 GetFileSystemInfos 方法遍历文件夹中的所有子文件夹及文件。
例9
下面演示如何遍历指定的文件夹,程序开发步骤如下:
(1)新建一个 Windows 应用程序,并命名为 Test06,默认窗体为 Form1.cs。
(2)在Form1 窗体中添加一个FolderBrowserDialog控件、一个TextBox控件、一个Button控件和一个ListView 控件。其中,FolderBrowserDialog 控件用来显示 “ 浏览文件夹 ” 对话框,TextBox 控件用来显示选择的文件夹路径及名称,Button 控件用来打开 “ 浏览文件夹 ” 对话框并获取选择文件夹中的子文件夹及文件,ListView 控件用来显示选择的文件夹中的子文件夹及文件信息。
(3)程序主要代码如下:
private void button1_Click(object sender,EventArgs e)
{
listView1.Items.Clear() //清空 ListView 控件中的项
if(folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Text = folderBrowserDialog1.SelectedPath;
DirectoryInfo dinfo = new DirectoryInfo(textBox1.Text); //实例化 Directoryinfo 对象
//获取指定目录下的所有子目录及文件类型
FileSystemInfo[] fsinfos = dinfo.GetFileSystemInfos();
foreach(FileSystemInfo fsinfo in fsinfos)
{
if(fsinfo is DirectoryInfo) //判断是否是文件夹
{
//使用获取的文件夹名称实例化 DirectoryInfo 对象
DirectoryInfo dirinfo = new DirectoryInfo(fsinfo.FullName);
listView1.Items.Add(dirinfo.Name); //为 ListView 控件添加文件夹信息
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 finfo = new FileInfo(fsinfo.FullName); //使用获取的文件名称实例化 FileInfo对象
listView1.Items.Add(finfo.Name); //为 ListView 控件添加文件信息
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 控件中。
往期推荐
C# 迭代器
C# 执行 SQL 语句
C# 连接数据库
C# 接口的实现与继承
C# 泛型的使用
Love life,love yourself
关注小编不迷路呦~