文章教程

12.3目录操作

8/31/2020 9:19:23 PM 人评论 次浏览

12.3 目录操作

磁盘中的文件过多时会将它们分类,将相同功能的文件放在同一个目录中。在ASP.NET中,通常使用Directory类和DirectoryInfo类操作目录。

Directory是一个静态类,该类提供了一系列操作目录的静态方法。DirectoryInfo是一个实例类,调用其实例方法可以有效地对一个目录进行操作。

12.3.1 获取目录基本信息

DirectoryInfo类包含13个属性,如表12-4所示。

表12-4 DirectoryInfo类的13个属性

【范例11】

在页面后台的Load事件中添加代码,如果F磁盘下的mytest目录存在,则获取该目录的基本信息,如创建时间、完整路径和目录名称等。代码如下。

    protected void Page_Load(object sender, EventArgs e) {
        DirectoryInfo di = new DirectoryInfo(@"F:\mytest");
        if (di.Exists)
          Response.Write("目录创建时间:" + di.CreationTime. ToShort Date String()+"<br/>完整路径:" + di.FullName + "<br/>最后一次访问时间:" + di.LastAccessTime + "<br/>最后一次修改时间:" + di.LastWriteTime+ "<br/>目录名称:" + di.Name + "<br/>父目录:" + di.Parent + "<br/>所在驱动器:" + di.Root.ToString());
    }

12.3.2 判断目录是否存在

判断目录是否存在时有两种方式:一种是通过DirectoryInfo类的Exists属性,如范例11;另一种是通过Directory类的Exists()方法。Exists()方法的语法形式如下。

    bool Directory.Exists(string path)             //path表示要测试的路径

【范例12】

更改范例11的代码,通过Directory类的Exists()方法判断目录是否存在。代码如下。

    DirectoryInfo di = new DirectoryInfo(@"F:\mytest");
    if (Directory.Exists(@"F; \mytest"))
        Response.Write("目录创建时间:" + di.CreationTime.ToShortDateString() +"<br/>完整路径:" + di.FullName + "<br/>最后一次访问时间:" + di. LastAccessTime + "<br/>最后一次修改时间:" + di.LastWriteTime + "<br/>目录名称:" + di.Name + "<br/>父目录:" + di.Parent + "<br/>所在驱动器:" + di.Root.ToString());

12.3.3 创建目录

Directory类中的CreateDirectory()方法可以创建目录。两种形式如下。

    CreateDirectory(string path)
    CreateDirectory(string path, DirectorySecurity directorySecurity)

其中,path参数指定要创建的目录路径,它可以是绝对路径或相对路径;directorySecurity参数应用指定的Windows安全性。

DirectoryInfo类的Create()方法直接创建目录。除了这个方法外,还可以通过CreateSubdirectory()方法在指定的路径中创建一个或者多个子目录。CreateSubdirectory()方法的基本语法如下。

    DirectoryInfo DirectoryInfo.CreateSubdirectory(string path)

其中,path参数表示指定的路径,它不能是另一个磁盘卷或者“统一命名约定”(UNC)名称。

【范例13】

通过if语句判断E磁盘下是否存在MyInfoList目录,如果存在则创建一个名称为“我的照片”的子目录,否则创建MyInfoList目录。代码如下。

    DirectoryInfo di = new DirectoryInfo(@"E:\MyInfoList");
    if (di.Exists)
        di.CreateSubdirectory("我的照片");
    else
        di.Create();

12.3.4 删除目录

Directory类的Delete()方法可以直接删除指定的目录。它的两种形式如下。

    void Directory.Delete(string path)     //从指定路径删除空目录
    //删除指定的目录并(如果指示)删除该目录中的所有子目录和文件
    void Directory.Delete(string path, bool recursive)

其中,path表示要移除的空目录的名称,这个目录必须可写或者为空。recursive是一个布尔值,如果要删除path中的目录、子目录和文件,则为true;否则为false。

DirectoryInfo类的Delete()方法也可以删除目录。它的两种形式如下。

    void DirectoryInfo.Delete()
    void DirectoryInfo.Delete(bool recursive)

【范例14】

判断E磁盘下是否存在MyInfoList目录,如果存在直接调用Delete()方法删除,并且删除该目录下的所有子目录和文件。代码如下。

    DirectoryInfo di = new DirectoryInfo(@"E:\MyInfoList");
    if (di.Exists)
        di.Delete(true);

12.3.5 遍历目录

遍历目录是指获取指定目录下的子目录和文件,如用户删除目录时可以首先遍历目录中的内容,判断该目录下是否包含其他子目录和文件。遍历目录涉及Directory和DirectoryInfo类中的多个方法,与Directory类有关的遍历方法如下。

(1)GetDirectories()方法:返回指定目录中子目录的名称。

(2)GetFiles()方法:返回指定目录中文件的名称。

(3)GetFileSystemEntries()方法:返回指定目录中所有文件和子目录的名称。

与DirectoryInfo类有关的遍历方法如下。

(1)GetDirectories()方法:返回当前目录的子目录。

(2)GetFiles()方法:返回当前目录的文件列表。

(3)GetFileSystemInfos()方法:返回表示某个目录中所有文件和子目录的强类型FileSystemInfo项的数组。

【范例15】

遍历当前应用程序下DirectoryOper目录下所有子目录和文件。步骤如下。

(1)在表单元素中创建表格元素,代码如下。

    <table width="90%">
        <thead>
          <tr><td width="30%">名称</td><td width="30%">类型</td><td>创建日期
          </td></tr>
        </thead>
        <tbody id="tbody" runat="server"></tbody>
    </table>

(2)在后台页面的Load事件中添加代码,调用DirectoryInfo类的GetFileSystemInfos()方法获取指定目录下的所有子目录和文件,然后进行遍历。代码如下。

    DirectoryInfo di = new DirectoryInfo(Server.MapPath("~") + "DirectoryOper");
        if (di.Exists) {                        //如果查看的目录存在
          FileSystemInfo[] sysList = di.GetFileSystemInfos();
                                                //获取目录的子目录和文件
          string info = "";
          foreach (FileSystemInfo item in sysList) {  //遍历获取到的目录
              if (item is DirectoryInfo)       //如果是文件夹
                  info+="<tr><td>"+item.Name+"</td><td>文件夹</td><td>"+item.CreationTime+"</td>";
              else                              //如果是文件
                  info+="<tr><td>"+item.Name+"</td><td>"+item.Extension+"文件</td><td>"+item.CreationTime+"</td>";
        }
        tbody.InnerHtml = info;
    }
    else
        tbody.InnerText = "很抱歉,您要查看的目录并不存在。";

(3)运行页面查看效果,如图12-3所示。

图12-3 遍历目录

提示

除了对目录进行创建、删除和遍历等操作外,还可以对目录进行移动、复制等操作,这里不再详细解释。

教程类别