你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 计算机安全与维护
6.8 网络硬盘的C#设计与实现(上)
 

随着Internet的发展,网络硬盘(或称网络空间)也逐渐被人们熟悉并得到广泛应用。那么,什么是网络硬盘呢?网络硬盘就是指将文件存储到服务器中,并对文件进行管理。对于普通用户,网络硬盘仅针对服务器上的某一文件夹;而对于管理员,则包括服务器中所有的硬盘分区及所有的文件。

通常,网络硬盘的功能包括浏览文件/文件夹、删除文件/文件夹、创建文件夹和上传下载文件等。

一、知识准备

1.母版页

为了给访问者一致的感受,每个网站都需要具有统一的风格和布局。如:整个网站都有相同的网页头尾、导航栏、功能条等。对于这一点,不同的技术发展阶段有不同的实现方法。ASP.NET2.0使用的母版页技术,从而能快速创建风格一致的应用程序。

ASP.NET2.0在实现网站一致性的过程中,必须包括两种文件:一种是母版页,另一种是内容页。母版页(.master)封装页面中的公共元素;内容页(.aspx)包含除母版页之外的其他非公共内容。在运行过程中,ASP.NET引擎将两种页面内容合并执行,最后将结果发给客户端浏览器。

2.System.IO命名空间

System.IO命名空间中包含用于在文件中读写数据的类。针对此项应用,笔者将用到以下类及其相应的属性和方法:

Directory类:静态实用类,提供许多静态方法,用于创建、复制、移动和删除目录的操作。

DirectoryInfo类:公开用于创建、移动和枚举目录和子目录的实例方法。

File类:静态实用类,提供许多静态方法,用于创建、复制、移动和删除文件的操作。

FileInfo类:提供创建、复制、删除、移动和打开文件的实例方法,并且帮助创建 FileStream 对象。

Path类:静态实用类,提供对包含文件或目录路径信息的 String 实例执行操作。

3.DataTable控件

此项目将在内存中建立下面结构的数据表,用于存储目录及文件信息。

name

size

extension

createtime

lasttime

fullname

filetype

 

 

 

 

 

 

 

name字段用于存储文件名称,对于文件夹来说,该字段还包括了相应的链接信息;size字段用于存储文件的大小,对于文件夹而言,该字段为空;extension字段存储文件的扩展名;createtime表示文件或文件夹的创建时间;lasttime字段表示文件或文件夹的最后修改时间;fullname字段表示文件或文件夹的完整路径;filetype表示此条信息的类型,1表示文件,0表示文件夹。

4.数据绑定

数据绑定是指将数据对象和窗口中的界面对象(比如控件)结合,使对象的值自动动态地在控件中显示。

(1)       绑定到控件

diskInfo disktable = new diskInfo(theDir);   //生成指定目录的数据表

   GridView1.DataSource = disktable.GetdTable;  //设置GridView数据源

   GridView1.DataBind();                        //数据绑定

2)数据绑定表达式“<%# %>”

当在页上调用 DataBind 方法时,数据绑定表达式创建控件属性和数据源之间的绑定,代码如下:

<a href='<%# "Upload.aspx?thedir="+HttpUtility.UrlEncode(lblPath.Text)%>'> [上传文件]</a>

5.GridView数据控件

GridView数据控件用于绑定数据表数据,显示浏览结果。其设置关键在于模板的编辑,VS2005中通过智能标签可轻松完成。定义代码如下:

<asp:GridView ID="GridView1" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None" AutoGenerateColumns="False" Width="98%">

         <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />

         <Columns>

             <asp:TemplateField HeaderText="文件名">

                <ItemTemplate>

                    <%# DataBinder.Eval(Container.DataItem,"name") %>

                </ItemTemplate>

             </asp:TemplateField>

             <asp:BoundField DataField="size" HeaderText="大小" />

             <asp:BoundField DataField="extension" HeaderText="类型" />

             <asp:BoundField DataField="createtime" HeaderText="创建时间" />

             <asp:BoundField DataField="lasttime" HeaderText="最后修改时间" />

             <asp:TemplateField HeaderText="操作">

                <ItemTemplate>

                    <asp:HyperLink ID="HyperLink1" runat="server" ImageUrl="image/down.gif" 

NavigateUrl='<%# "Main.aspx?type=down&thedir=

"+HttpUtility.UrlEncode(Convert.ToString(DataBinder.Eval(Container.DataItem,"fullname")))

%>' Visible='<%# Convert.ToInt16(DataBinder.Eval(Container.DataItem,"filetype"))

==1?true:false %>'>下载文件</asp:HyperLink> &nbsp; &nbsp; &nbsp;

                    <asp:HyperLink ID="HyperLink2" runat="server" ImageUrl="image/delete.gif"

NavigateUrl='<%# "Main.aspx?type=delete&thedir=

"+HttpUtility.UrlEncode(Convert.ToString(DataBinder.Eval(Container.DataItem,"fullname")))+"

&sign="+Convert.ToString(DataBinder.Eval(Container.DataItem,"filetype"))%>'>删除</asp:HyperLink>

                </ItemTemplate>

         </asp:TemplateField>

         </Columns>

         <RowStyle BackColor="#FFFBD6" ForeColor="#333333" />

         <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />

         <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />

         <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />

         <AlternatingRowStyle BackColor="White" />

         <EmptyDataTemplate>

            <center>

                <span style="color: red">Sorry,there are no files or folders.</span></center>

         </EmptyDataTemplate>

 </asp:GridView>

更多相关类、控件的信息可查阅MSDN Library获得。

二、定义读取指定路径文件信息的类

在项目中添加一个命名为diskInfo的类,完成读取指定路径上文件和文件夹信息,并存储在DataTable对象中。实现代码如下:

public class diskInfo                //文件名:diskInfo.cs

{   DataTable dTable;

    string path;                     //存储指定的路径

    public diskInfo(string thePath)   //构造函数,初始化path和表的数据结构

    {   path = thePath;

        dTable = new DataTable();

        dTable.Columns.Add(new DataColumn("name", System.Type.GetType("System.String")));        dTable.Columns.Add(new DataColumn("size", System.Type.GetType("System.String")));

        dTable.Columns.Add(new DataColumn("extension", System.Type.GetType("System.String")));

        dTable.Columns.Add(new DataColumn("createtime", System.Type.GetType("System.DateTime")));

        dTable.Columns.Add(new DataColumn("lasttime", System.Type.GetType("System.DateTime")));

        dTable.Columns.Add(new DataColumn("fullname", System.Type.GetType("System.String")));

        dTable.Columns.Add(new DataColumn("filetype", System.Type.GetType("System.Int16")));

    }

    public DataTable GetdTable        //属性,返回DataTable对象

    {   get

        {  readDiskInfo();

            return dTable;

        }

    }

    public void readDiskInfo()

    {   DirectoryInfo dirObj;           //文件夹信息对象

        DirectoryInfo[] dirObjArray;    //文件夹信息对象数组

        FileInfo[] fileObjArray;        //文件信息对象数组

        dirObj = new DirectoryInfo(path);//实例化指定路径的DirectoryInfo对象

        dirObjArray = dirObj.GetDirectories();

        for (int i = 0; i < dirObjArray.Length; i++)

        {   DataRow dr = dTable.NewRow();       //实例化行对象,并填充目录数据

            dr[0] = "<a href='Main.aspx?type=browser&thedir=" + HttpUtility.UrlEncode(dirObjArray[i].FullName) + "'><img border='0' src='image/folder.gif' >" + dirObjArray[i].Name + "</a>";  //添加目录链接信息

            dr[1] = "";

            dr[2] = "文件夹";

            dr[3] = dirObjArray[i].CreationTime;

            dr[4] = dirObjArray[i].LastWriteTime;

            dr[5] = dirObjArray[i].FullName;

            dr[6] = 0;

            dTable.Rows.Add(dr);

        }

        fileObjArray = dirObj.GetFiles();

        for (int i = 0; i < fileObjArray.Length; i++)

        {   DataRow dr = dTable.NewRow();      //实例化行对象,并填充文件数据

            dr[0] = fileObjArray[i].Name;

            dr[1] = fileObjArray[i].Length + "字节";

            dr[2] = fileObjArray[i].Extension;

            dr[3] = fileObjArray[i].CreationTime;

            dr[4] = fileObjArray[i].LastWriteTime;

            dr[5] = fileObjArray[i].FullName;

            dr[6] = 1;

            dTable.Rows.Add(dr);

        }

    }

}

三、浏览文件

这是网络硬盘最基本,最重要的功能,其他功能都是以此界面为基础。如图1:包括驱动器选择、子目录浏览、返回上级目录、删除文件/文件夹、创建文件夹、下载文件、上传文件。这些功能都是通过相应的链接串在一起。


1 浏览文件和文件夹

如图1所示,可通过两种方式浏览文件。一是选择驱动器,可浏览该驱动器下所有的文件夹及文件;二是单击相应的文件夹链接,可浏览该文件夹下的所有子目录及文件。

选择驱动器采用了DropDownList控件(实例名为:driverNameList),在Page_Load中编写如下代码:

if (!Page.IsPostBack)

        {   string[] arrayDriverName;  //存储逻辑驱动器名字符数组

            arrayDriverName = System.IO.Directory.GetLogicalDrives();

            driverNameList.Items.Add(new ListItem("请选择...", "0"));  //初始化DropDownList控件

            for (byte i = 1; i <= arrayDriverName.Length; i++)

            {   ListItem theItem = new ListItem(arrayDriverName[i-1], i.ToString());

                driverNameList.Items.Add(theItem);

            }

  ……

        }

protected void driverNameList_SelectedIndexChanged(object sender, EventArgs e)//显示指定驱动器信息

    {   if (driverNameList.SelectedIndex != 0)

        {  diskInfo disktable = new diskInfo(driverNameList.SelectedItem.Text);

           GridView1.DataSource = disktable.GetdTable;

           GridView1.DataBind();

           lblPath.Text = driverNameList.SelectedItem.Text;   //Label控件显示当前路径

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089