public void GetSysInf () {
//获取操作系统类型
qdrives = Environment.OSVersion.ToString();
//获取系统文件夹
qsystemdir = Environment.SystemDirectory.ToString();
/*获取映射到进程上下文的物理内存量,通过这一内存映射量可以了解asp.net程序在运行时需要多少系统物理内存,有助于更好的规划我们的整个应用,因为物理内存量是以byte为单位的,所以我们将此数值除以1024,可以得到单位为kb的物理内存量*/
qmo = (Environment.WorkingSet/1024).ToString();
//获取当前目录(即该进程从中启动的目录)的完全限定路径
qcurdir = Environment.CurrentDirectory.ToString();
//获取主机的网络域名
qdomname = Environment.UserDomainName.ToString();
//获取系统启动后经过的毫秒数
qtick = Environment.TickCount;
//计算得到系统启动后经过的分钟数
qtick /= 60000;
//获取机器名
qmachine = Environment.MachineName;
//获取运行当前进程的用户名
quser = Environment.UserName;
/*检索此计算机上格式为"<驱动器号>:\"的逻辑驱动器的名称,返回字符串数组,这是下一步操作的关键所在*/
achdrives = Directory.GetLogicalDrives();
//获取此字符串数组的维数,确定有多少个逻辑驱动器
nnumofdrives = achDrives.Length;
}
系统信息不需要进行操作,我们简单的用asp:Label将他们显示出来就行了。逻辑驱动器的个数在不同的服务器上是不定的,所以用不定长数组保存逻辑驱动器的名称,而且逻辑驱动器的名称也是我们下一步浏览目录和文件的基础,故我们采用了数据网格DataGrid来显示和处理它。
显示和处理逻辑驱动器名称的DataGrid的代码(代码在listdrivers.aspx文件):
<asp:DataGrid id="DriversGrid" runat="server" AutoGenerateColumns="false">
<columns>
<asp:boundcolumn HeaderText="ID" DataField="ID" />
<asp:boundcolumn HeaderText="磁盘名" DataField="Drivers" />
<asp:hyperlinkcolumn
headertext="详细信息"
datanavigateurlfield="drivers" DataNavigateUrlFormatString="listdir.aspx?dir={0}"
datatextfield="detail"
target="_new" />
</columns>
</asp:datagrid>
前两个BoundColumn列都是显示序号和实际逻辑驱动器名称的,需要说明的是第三列,我们在进入各个逻辑驱动器显示目录和文件之前需要将所选择的逻辑驱动器的名称传递到显示目录的文件去,所以需要一个特殊的超级链接行HyperLinkColumn,我们将DataNavigateUrlField设置为数据源中要绑定到 HyperLinkColumn 中的超级链接的 URL 的字段,在此即逻辑驱动器名称。然后将DataNavigateUrlFormatString设置为当 URL 数据绑定到数据源中的字段时,此HyperLinkColumn中的超级链接的 URL 的显示格式,即要链接到的下一级处理页面,在此为listdir.aspx?dir={用户点击行的逻辑驱动器名称}
创建数据源的代码(代码在listdrivers.aspx.cs文件中):
//通过此方法返回一个集合形式的数据视图dataview
icollection CreateDataSource() {
//定义内存中的数据表datatable
datatable dt = new DataTable();
//定义datatable中的一行数据datarow
datarow dr;
/*向datatable中增加一个列,格式:datacolumn("column", type)
column为数据列的名字,type为数据列的数据类型*/
dt.columns.add(new DataColumn("ID", typeof(Int32)));
dt.columns.add(new DataColumn("drivers", typeof(string)));
dt.columns.add(new DataColumn("detail", typeof(string)));
//使用for循环将逻辑驱动器的名称以行的形式添加到数据表datatable中
for (int i = 0; i < nNumOfDrives; i++) {
//定义新行
dr = dt.NewRow();
//对行中每列进行赋值,注意要与上边定义的datatable的行相对应
dr[0] = i; //循环生成的序号
dr[1] = achDrives[i].ToString(); //逻辑驱动器的名称
dr[2] = "查看详情";
//向datatable中添加行
dt.rows.add(dr);
}
//根据得到的datatable生成自定义视图dataview
dataview dv = new DataView(dt);
//返回得到的视图dataview
return dv;
}
我们通过这个方法得到了一个包含所有我们需要的数据的数据视图DataView,我们只需要在此aspx页的Page_Load方法中将此数据视图绑定到DataGrid上就可以了。
数据绑定代码(代码在listdrivers.aspx.cs文件中):
/* 设置DataGrid的数据源DataSource为我们从CreateDataSource()方法得到的数据视图DataView */
driversgrid.datasource = CreateDataSource();
//将此datagrid进行数据绑定
driversgrid.databind();
通过上边介绍的几种主要方法我们就实现了获取系统信息和显示所有逻辑驱动器名称的功能,并且可以通过相应的链接进入下一个显示目录和文件名的程序listdir.aspx显示该逻辑驱动器下的所有目录和文件。