用DataGrid展示目录下的文件 (第一部分)


在某些情况下,我们需要在网站开发界面里展示服务器文件系统的信息。比如我们想提供一个“控制面板”供用户编辑他们的文章。

  在传统的ASP程序里,要访问文件系统,开发者需要使用FileSystemObject library(更多详细信息请参考ASPFAQs.com网站的FileSystemObject FAQ Category部分),而在.NET里,System.IO命名空间里有一系列的类可以访问文件系统。

  在ASP.NET里访问文件系统与在ASP里一样容易,使用ASP.NET的优势在于显示文件系统信息。就像将在本文看到的那样,文件系统信息可以绑定到任何的数据Web控件,比如DataGrid

  DataList或Repeater。那意味着我们花最少的时间就可以将信息美观地展示出来。

  考察用ASP.NET访问文件系统

  在.NET Framework里,有2个类可以访问目录信息:Directory class和DirectoryInfo class类;也有另2个类访问文件信息:File class和FileInfo class类。

  这2种类的区别在于用法不同以及返回信息的层次不同。Directory 和 File class类属于静态类,那意味着你不用先创建一个类实例然后再调用类的方法。这在你想快速执行一些与目录相关的函数时很有用。比如,要删除一个文件,你可以使用File.Delete(filePath); 要判断是否存在一个目录,可以使用Directory.Exists(directoryPath).

  而FileInfo 和 DirectoryInfo class类,我们要先创建一个类的实例,并指定文件或目录的名字。比如,要使用FileInfo class类删除一个文件,你应该使用下面的代码:

  Dim myFile as FileInfo = New FileInfo(filePath)

  myFile.Delete()

  获取一个目录下文件的列表

  Directory 和 DirectoryInfo class类都包含一个方法来获取某个目录下的所有文件(或目录下与某些通配符表达式相匹配的所有文件,比如*.htm)。该方法就是GetFiles() ,用法如下:
' --- Directory Example ----
Dim files() as String = Directory.GetFiles(directoryPath,[optiona] WildCard])
  
' --- DirectoryInfo Example ----
Dim myDir as DirectoryInfo = New DirectoryInfo(directoryPath)
Dim fileInfos() as FileInfo = myDir.GetFiles([optiona] WildCard])

  就像你看到的那样,Directory.GetFiles()方法接受1到2个参数。你必须指定要获取文件的目录的路径;而wildcard path(比如*.aspx),可以指定也可以不指定。该方法返回一个字符串数组,包含的是目录里的文件名。而DirectoryInfo.GetFiles()方法不需要目录路径参数因为已经知道了目录的路径;与Directory.GetFiles()方法不同,DirectoryInfo.GetFiles() 方法返回的是FileInfo对象(FileInfo objects)数组,而不是字符串数组。

  在DataGrid里显示某个目录下的文件

  为了在DataGrid(DataList或Repeater)控件里显示一个目录下的文件,我们需要做的是将DataGrid控件的DataSource属性赋值为String数组或FileInfo数组,然后调用DataGrid控件的DataBind()方法。在本例,我们用DirectoryInfo.GetFiles()方法,而不是Directory.GetFiles()方法。如果我们使用Directory.GetFiles()方法,我们只能在DataGrid控件里显示文件的文件名,而使用DirectoryInfo.GetFiles()的话我们还可以展示文件的其它特征,比如文件大小,最近修改时间等等。

<%@ Import Namespace="System.IO" %>
<script language="VB" runat="server">
 Sub Page_Load(sender as Object, e as EventArgs)
  Dim dirInfo as New DirectoryInfo(Server.MapPath(""))
  
  articleList.DataSource = dirInfo.GetFiles("*.aspx")
  articleList.DataBind()
 End Sub
</script>
  
<asp:DataGrid runat="server" id="articleList" Font-Name="Verdana"
  AutoGenerateColumns="False" AlternatingItemStyle-BackColor="#eeeeee"
  HeaderStyle-BackColor="Navy" HeaderStyle-ForeColor="White"
  HeaderStyle-Font-Size="15pt" HeaderStyle-Font-Bold="True">
 <Columns>
  <asp:HyperLinkColumn DataNavigateUrlField="Name" DataTextField="Name"
      HeaderText="File Name" />
  <asp:BoundColumn DataField="LastWriteTime" HeaderText="Last Write Time"
    ItemStyle-HorizontalAlign="Center" DataFormatString="{0:d}" />
  <asp:BoundColumn DataField="Length" HeaderText="File Size"
 ItemStyle-HorizontalAlign="Right"
 DataFormatString="{0:#,### bytes}" />
 </Columns>
</asp:DataGrid> 


  正如以上示例代码显示的那样,为了将目录下的文件绑定到ASP.NET页面的DataGrid控件,我们只需要简单地将DataGrid的DataSource属性设为GetFiles()方法返回的结果。特别的,以上示例代码将某个目录下后缀为.aspx的文件显示出来,而这个目录就是这个ASP.NET Web页面自身所在的目录。

  要将FileInfo class类的某个具体属性显示在DataGrid控件的某个列,只需要相应的设置该列的属性即可。比如,要将FileInfo.Length属性显示在最后一个BoundColumn,我们将该BoundColumn的DataField属性设置为Length.

  目前,我们探究的仅仅是将目录下的文件显示出来,如何允许用户通过点击一个按钮来删除一个文件呢?我们在第2部分在讨论


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3