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

 
本文英文原版:
http://aspnet.4guysfromrolla.com/articles/052803-1.aspx

用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部分在讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值