文章教程

14.2对文件夹的操作

8/31/2020 9:52:39 PM 人评论 次浏览

14.2 对文件夹的操作

Web应用程序中经常需要操作Web服务器的文件夹和子文件夹。System.IO包含的Directory类和DirectoryInfo类提供的一组方法,可以实现对文件夹的操作。

14.2.1 使用Directory类

Directory类是一个静态类,提供了许多的操作目录和子目录的静态方法,可以用于对目录和子目录的创建、移动、复杂和删除等操作。由于这些方法都是静态方法,因此可以在类上直接使用,而不需要创建类的实例。

Directory类的主要静态方法有以下数种,下面进行一一地介绍。

1.CreateDirectory方法

CreateDirectory是创建目录的方法,该方法的声明代码如下所示:

alt

以上代码中第1行定义一个DirectoryInfo类型的静态方法CreateDirectory,返回值是由path指定的DirectoryInfo。第2行中的字符串类型的对象参数path用于指定要创建的目录。

下面的代码示例在C:\vs2012文件夹下创建名为Website目录:

alt

以上代码中第1行定义一个私有类型的方法Create。第2行调用Directory类的CreateDirectory静态方法创建C:\vs2012文件夹下创建名为Website目录。

2.Delete方法

Delete是删除目录的方法,该方法的声明代码如下所示:

alt

以上代码中第1行定义一个DirectoryInfo类型的静态方法Delete。第2行中的字符串类型的对象参数path用于指定要删除的目录。第3行的第二个参数为bool类型,可以指定是否删除非空目录。如果该参数为true,将删除整个目录,即使该目录下有文件或子目录;如果参数为false,则仅在目录为空时才可以删除。

下面的代码将C:\vs2012文件夹下创建名为Website目录删除:

alt

以上代码中第1行定义一个私有类型的方法DeleteDirectory。第2行调用Directory类的静态方法Delete删除C:\vs2012文件夹下名为Website的目录。

3.Move方法

Move是移动目录的方法,该方法的声明代码如下所示:

alt

以上代码中第1行定义一个静态方法Move。第2行中的字符串类型的参数sourceDirName表示要移动的文件或目录的路径。第3行的第二个字符串类型的参数destDirName表示指向sourceDirName的新位置的路径。

下面的代码实现将目录C:\vs2012文件夹下名为Website目录移动到D:\vs2012文件夹下名为Website的目录:

alt

以上代码中第1行定义一个私有类型的方法MoveDirctory。第2行调用Directory类的静态方法Move将目录C:\vs2012文件夹下名为Website目录移动到D:\vs2012文件夹下名为Website目录。

4.GetDirctories方法

GetDirctories是获取指定目录下所有子目录的方法,该方法的声明代码如下所示:

alt

以上代码中第1行定义一个静态的GetDirectories方法,该方法返回一个字符串类型的数组,它包含path中子目录的名称。第2行的参数path为其返回子目录名称的数组的路径。

以下代码实现读取C:\vs2012文件夹下名为Website目录下的所有子目录,并将其保存到字符串数组中:

alt

以上代码中第1行定义一个私有类型的方法GetDirectory。第2行声明一个字符串数组directorys。第3行使用Directory类的静态方法GetDirctories获得C:\vs2012文件夹下名为Website目录下的所有子目录。

5.GetFiles方法

GetFiles是获取指定目录下所有文件的方法,该方法的声明代码如下所示:

alt

以上代码中第1行定义一个静态的GetFiles方法,该方法返回一个字符串类型的数组,它包含path子目录中所有文件的名称,文件名包含完整路径。

下面的代码实现了读取C:\vs2012文件夹下名为Website目录下的所有子目录。并将其保存到字符串数组中:

alt

以上代码中第1行定义一个私有类型的方法GetFile。第2行声明一个字符串数组files。第3行使用Directory类的静态方法GetFiles获得C:\vs2012文件夹下名为Website目录下的所有子目录。

6.Exists方法

Exists是判断指定目录是否存在的方法,该方法的声明代码如下所示:

alt

以上代码中第1行定义一个静态的Exists方法,该方法返回一个布尔类型的值,如果目录存在返回值为true,否则返回值为false。第2行的参数path表示指定目录的路径。

下面的代码实现判断C:\vs2012文件夹下名为Website目录是否存在,如果存在则获取该目录下的子目录。

alt

上面的代码中第1行定义一个私有类型的方法Handle。第2行调用Directory类的静态方法Exists,判断如果C:\vs2012文件夹下名为Website目录是否存在,则在第3行声明一个字符串数组dis。第4行使用Directory类的静态方法GetDirctories获得C:\vs2012文件夹下名为Website目录下的所有子目录。

7.GetParent方法

GetParent是获取指定目录父目录的方法,该方法的声明代码如下所示:

alt

以上代码中第1行定义一个静态的方法GetParent,返回值是由path指定的父目录。第2行中的字符串类型的对象参数path用于检索父目录的路径。

下面的代码实现返回C:\vs2012\Website目录的父目录C:\vs2012。

alt

以上代码中第1行定义一个私有类型的方法GetLast。第2行声明一个DirectoryInfo类型的对象di用于获取父目录的信息。第3行使用Directory类的静态方法GetParent获得C:\vs2012文件夹下名为Website目录的上一级父目录。

【实例14-2】对文件夹的操作

本实例将演示如何使用Directory类提供的静态方法创建、移动和删除文件夹。用户在对应的文本框中输入文件夹的路径,单击操作按钮,程序会对文件夹执行相应的操作,具体实现步骤如下:

01 启动Visual Studio 2012,创建一个ASP.NET Web空应用程序,命名为“实例14-2”。

02 在网站根目录下创建一个名为Default.aspx的窗体文件。

03 鼠标单击Default.aspx文件,进入的“视图编辑”界面,切换到“设计视图”,从工具箱中拖动4个TextBox控件、三个Button控件和一个Label控件到编辑区中。

04 单击网站目录下的Default.aspx.cs文件,编写关键代码如下:

alt

上面的代码中第1行定义创建文件夹按钮控件Button1单击事件Click的方法。第3行调用Directory类的静态方法Exists判断用户输入的文件夹如果已经存在,则第4、5行给出提示并终止程序,否则第8行调用Directory类的静态方法CreateDirectory创建文件夹,第9行给出创建成功的提示。如果创建文件夹出现错误,在第13行给出错误原因的提示。

第17行定义移动文件夹按钮控件Button4单击事件Click的方法。第18行~第21行判断用户输入的源文件夹如果不存在,则给出提示并退出程序,第22行~第25行若判断用户输入的目标文件夹已经存在,则给出提示并退出程序,否则,第26行调用Directory类的静态方法Move将源文件夹移动到目标路径。

第33行定义删除文件夹按钮控件Button3单击事件Click的方法。第34行判断用户输入的文件夹如果存在,则第35行调用Directory类的静态方法Delete删除该文件夹。第37行在标签控件上显示删除成功的文字,否则第40行在标签控件上显示该文件夹不存在的提示。如果操作过程中出现异常情况,第44行处理异常将异常的信息显示在标签控件上。

05 按快捷键Ctrl+F5运行程序,如图14-2所示。

alt

图14-2 运行结果

14.2.2 使用DirectoryInfo类

DircetoryInfo类表示驱动器上的物理目录,DircetoryInfo类和Dircetory类一样都包含了很多对目录进行操作的方法和属性,但是与Dircetory类不同的是,这些方法和属性不是静态的,需要实例化类的对象,将其和特定的目录联系起来。DircetoryInfo类的构造函数声明如下:

alt

以上代码中第1行定义了一个DirectoryInfo类的构造函数,它带有一个参数就是第2行的字符串对象path指定要在其中创建DirectoryInfo的路径。比如下面的代码创建一个与目录C:\vs2012\Website对应的DirectoryInfo实例对象。

alt

1.DirectoryInfo类的属性

DirectInfo类的主要属性有以下几种,下面逐一进行的介绍。

(1)Attributes属性

Attributes是获取和设置目录的属性,其使用FileAttributes枚举类型来获取和设置属性。 FileAttributes枚举提供文件和目录的属性,所包含的成员如表14-2所示。

表14-2 FileAttributes枚举成员

alt

下面的代码设置C:\vs2012\WebSite目录为只读且隐藏。与文件属性相同,目录属性也是使用FileAttributes来进行设置的。

alt

以上代码中第1行定义一个私有类型的方法SetDirectory。第2行创建一个与目录C:\vs2012\WebSite对应的DirectoryInfo实例对象di。第3行调用di的Attributes属性设置目录为只读并且隐藏。

(2)CreationTime属性

CreationTime是获取目录创建时间的属性。下面的代码将返回目录C:\vs2012\WebSite的创建时间。

alt

以上代码中第1行定义一个私有类型的方法CreationTime。第2行创建一个与目录C:\vs2012\WebSite对应的DirectoryInfo实例对象di。第3行调用di的CreationTime属性获得创建目录的时间赋给DateTime类型的对象time。

(3)FullName和Name属性

FullName和Name都是获取目录名称的属性,Name属性仅返回的是目录的名称,而FullName则可以返回目录的完整的路径。下面的代码实现返回目录D:\Program Files\TaoBao的两种不同的名称。

alt

以上代码中第1行创建一个与目录D:\Program Files\TaoBao对应的DirectoryInfo实例对象dir。第3行调用dir的Name属性获得创建目录的名称。第4行调用dir的FullName属性获得创建目录的完整物理路径。

(4)Parent属性

Parent是获取指定子目录的父目录属性,如果目录不存在或者指定的目录是根目录父目录(如“\”、“C:”、“*”或“\\server\share”),则返回值为空引用Null。下面的代码实现返回C:\vs2012\WebSite的父目录C:\vs2012。

alt

以上代码中第1行创建一个与目录C:\vs2012\WebSite对应的DirectoryInfo实例对象di。第2行通过调用di对象的属性Parent获得父目录并赋给一个DirectoryInfo类型对象pdir。

(5)Root属性

Root是返回指定目录根目录的属性,该属性是一个只读的属性。下面的代码实现返回C:\vs2012\WebSite的根目录C:\。

alt

以上代码,第1行创建一个与目录C:\vs2012\WebSite对应的DirectoryInfo实例对象di。第2行通过调用di对象的属性Root获得根目录并赋给DirectoryInfo类型的对象pdir。第3行调用pdir的FullName属性获得根目录的完整路径并赋给一个字符串对象str。

2.DirectoryInfo类的方法

DircetoryInfo类的常用方法包括以下几种,下面进行一一地介绍。

(1)Create方法

Create是创建目录的方法,该方法的声明代码如下所示:

alt

下面的代码演示创建一个名为C:\vs2012\Website的目录。

alt

以上代码,第1行定义一个私有类型的方法CreateDirectory。第2行创建一个与目录C:\vs2012\Website对应的DirectoryInfo实例对象di。第3行调用di的Create方法创建该目录。

(2)Delete方法

Delete是删除目录的方法,该方法的声明代码如下所示:

alt

以上代码中定义一个方法Delete。参数recursive用来指定是否删除非空目录。如该参数为true,将删除整个目录,即使该目录下有文件或子目录;如果参数为false,则仅在目录为空时才可以删除,如果目录不为空则会引发异常。如果不指定recursive,则默认为false。

下面的代码示例将C:\vs2012文件夹下创建名为Website目录删除:

alt

以上代码中第1行定义一个私有类型的方法DeleteDirectory。第2行创建一个与目录C:\vs2010\Website对应的DirectoryInfo实例对象di。第3行调用di的Delete方法删除该目录。

(3)MoveTo方法

MoveTo是删除目录的方法,该方法的声明代码如下所示:

alt

以上代码中定义一个方法MoveTo。字符串类型的参数destDirName用来指定将要此目录移动到目标位置的名称和路径。目标不能是另一个具有相同名称的目录。可以是要将此目录作为子目录添加到其中的一个现有目录。

下面的代码实现将目录C:\vs2012文件夹下名为Website目录移动到D:\vs2012文件夹下名为Object的目录。

alt

以上代码中第1行定义一个私有类型的方法MoveDirectory。第2行创建一个与目录C:\vs2012\Website对应的DirectoryInfo实例对象di。第3行调用di的MoveTo方法移动到目标目录D:\vs2012\Object。

(4)CreateSubdirectory方法

CreateSubdirectory是在指定路径中创建一个或多个子目录的方法,该方法的声明代码如下所示:

alt

以上代码中定义一个方法CreateSubdirectory,返回值是在path中指定的最后一个目录。字符串类型的参数path用来指定子目录的路径,如果path所指定的子目录已经存在,则此时该方法不执行任何操作。

下面的代码在C:\vs2012文件夹下创建名为WebSite的子目录。

alt

以上代码中第1行定义一个私有类型的方法CreateSubdirectory。第2行创建一个与目录C:\vs2012对应的DirectoryInfo实例对象di。第3行调用di的CreateSubdirectory方法创建子目录WebSite。

(5)GetFiles方法

GetFiles是返回当前目录的文件列表的方法,它有两个重载的方法,其声明代码分别如下所示:

alt

以上代码中第1行定义的是不带参数的GetFiles方法,返回一个FileInfo类型的数组,其中包含了DirectoryInfo目录下所有的文件。第2行定义的是带一个参数的GetFiles方法,字符串参数searchPattern用来指定搜索字符串,允许使用通配符。搜索出的目录文件列表以FileInfo类型的数组返回。

(6)GetDirectories方法

GetDirectories是返回当前目录子目录的方法,它也有两种重载的方法,其声明代码分别如下所示:

alt

以上代码中第1行定义的是不带参数的GetDirectories方法,返回一个FileInfo类型的数组,其中包含了DirectoryInfo目录下所有的子目录。第2行定义的是带一个参数的GetDirectories方法,字符串参数searchPattern用来指定搜索字符串,允许使用通配符。搜索出的子目录以FileInfo类型的数组返回。

【实例14-3】DirectoryInfo类的使用

本例实现当用户在文本框中输入要检索的文件夹路径并单击“计算目录大小”按钮时,下面的TreeView中会显示出该文件夹中所有子文件夹和文件并统计大小,具体实现步骤如下:

01 启动Visual Studio 2012,创建一个ASP.NET Web空应用程序,命名为“实例14-3”。

02 在网站根目录下创建名为Default.aspx的窗体文件。

03 单击网站的目录下的Default.aspx文件,进入“视图编辑”界面,从工具箱中拖动一个TextBox控件、一个Button控件一个TreeView和两个Label控件到“设计视图”。

04 双击网站目录下的Default.aspx.cs文件,编写关键代码如下:

alt

上面的代码中第1行定义处理按钮控件Button1的单击事件Click的方法。第2行获取文件夹路径。第3行到第9行判断如果文件夹存在,则遍历目录。第10行判断如果文件夹不存在则第11行显示提示信息。

第14行自定义计算指定目录大小,并显示目录和文件的方法DirSize。第16行获取文件夹下文件集。第17行~第23行添加文件到TreeView中,其中第22行累计文件大小。第24行获取文件夹下子文件夹集。第26行添加文件夹到TreeNode中。第30行递归调用DirSize方法。第32行返回DirectoryInfo对象d下文件夹大小。

05 按快捷键Ctrl+F5运行程序,如图14-3所示。

alt

图14-3 运行结果

教程类别