直播中
在我們編寫代碼之前,有必要了解一下我們需要用到的幾個主要的類。這幾個類都在System.IO名稱空間下,System.IO 名稱空間包含允許在數(shù)據(jù)流和文件上進行同步和異步讀寫的類。
在整個應(yīng)用程序的開始部分我們需要了解一下服務(wù)器的系統(tǒng)信息,這就需要用到System.Environment類,該類提供有關(guān)當(dāng)前環(huán)境和平臺的信息以及操作它們的方法。我們通過System.Environment類可以得到系統(tǒng)的當(dāng)前目錄和系統(tǒng)目錄,這可以使我們更快的發(fā)現(xiàn)幾個關(guān)鍵的目錄;我們還可以通過獲取運行當(dāng)前進程的用戶名來幫助我們了解ASP.NET程序運行所使用的用戶,進一步設(shè)置用戶權(quán)限以避免這一安全問題。
我們還要使用System.IO名稱空間的其他幾個類是:
System.IO.Directory:提供用于創(chuàng)建、移動和枚舉通過目錄和子目錄的靜態(tài)方法的類
System.IO.File:提供用于創(chuàng)建、復(fù)制、刪除、移動和打開文件的靜態(tài)方法的類
System.IO.FileInfo:提供創(chuàng)建、復(fù)制、刪除、移動和打開文件的實例方法的類
System.IO.StreamReader:實現(xiàn)一個 TextReader,使其以一種特定的編碼從字節(jié)流中讀取字符。
每個我們所使用的類的屬性和方法的具體用法我們將以代碼注釋的方式在程序中加以說明。
System.IO名稱空間在 .NET FRAMEWORK提供的mscorlib.dll中,在使用VS.Net編程之前需要將此Dll引用到此項目中。
我們所編寫的程序都使用了Codebehind方式,即每一個aspx程序都有一個對應(yīng)的aspx.cs程序,aspx程序中只是寫與頁面顯示相關(guān)的代碼,所有邏輯實現(xiàn)的代碼都放在相應(yīng)的aspx.cs文件中,這樣就可以更好得做到顯示與邏輯的分離。由于我們的目的不是討論Codebehind技術(shù),所以就不在對此多加討論了。
在這篇文章里,我們只介紹幾個主要的類及其關(guān)鍵方法的用法,詳細程序請查看附帶的源代碼。
程序一:顯示服務(wù)器的當(dāng)前信息和全部邏輯驅(qū)動器的名稱的程序listdrivers.aspx
主要方法1:我們使用 GetSysInf() 方法來得到服務(wù)器的當(dāng)前環(huán)境和平臺的信息
//獲取系統(tǒng)信息的方法,此方法在listdrivers.aspx.cs文件中
public void GetSysInf () {
//獲取操作系統(tǒng)類型
qDrives = Environment.OSVersion.ToString();
//獲取系統(tǒng)文件夾
qSystemDir = Environment.SystemDirectory.ToString();
/*獲取映射到進程上下文的物理內(nèi)存量,通過這一內(nèi)存映射量可以了解ASP.NET程序在運行時需要多少系統(tǒng)物理內(nèi)存,有助于更好的規(guī)劃我們的整個應(yīng)用,因為物理內(nèi)存量是以Byte為單位的,所以我們將此數(shù)值除以1024,可以得到單位為KB的物理內(nèi)存量*/
qMo = (Environment.WorkingSet/1024).ToString();
//獲取當(dāng)前目錄(即該進程從中啟動的目錄)的完全限定路徑
qCurDir = Environment.CurrentDirectory.ToString();
//獲取主機的網(wǎng)絡(luò)域名
qDomName = Environment.UserDomainName.ToString();
//獲取系統(tǒng)啟動后經(jīng)過的毫秒數(shù)
qTick = Environment.TickCount;
//計算得到系統(tǒng)啟動后經(jīng)過的分鐘數(shù)
qTick /= 60000;
//獲取機器名
qMachine = Environment.MachineName;
//獲取運行當(dāng)前進程的用戶名
qUser = Environment.UserName;
/*檢索此計算機上格式為"<驅(qū)動器號>:\"的邏輯驅(qū)動器的名稱,返回字符串?dāng)?shù)組,這是下一步操作的關(guān)鍵所在*/
achDrives = Directory.GetLogicalDrives();
//獲取此字符串?dāng)?shù)組的維數(shù),確定有多少個邏輯驅(qū)動器
nNumOfDrives = achDrives.Length;
}
系統(tǒng)信息不需要進行操作,我們簡單的用asp:Label將他們顯示出來就行了。邏輯驅(qū)動器的個數(shù)在不同的服務(wù)器上是不定的,所以用不定長數(shù)組保存邏輯驅(qū)動器的名稱,而且邏輯驅(qū)動器的名稱也是我們下一步瀏覽目錄和文件的基礎(chǔ),故我們采用了數(shù)據(jù)網(wǎng)格DataGrid來顯示和處理它。
顯示和處理邏輯驅(qū)動器名稱的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列都是顯示序號和實際邏輯驅(qū)動器名稱的,需要說明的是第三列,我們在進入各個邏輯驅(qū)動器顯示目錄和文件之前需要將所選擇的邏輯驅(qū)動器的名稱傳遞到顯示目錄的文件去,所以需要一個特殊的超級鏈接行HyperLinkColumn,我們將DataNavigateUrlField設(shè)置為數(shù)據(jù)源中要綁定到 HyperLinkColumn 中的超級鏈接的 URL 的字段,在此即邏輯驅(qū)動器名稱。然后將DataNavigateUrlFormatString設(shè)置為當(dāng) URL 數(shù)據(jù)綁定到數(shù)據(jù)源中的字段時,此HyperLinkColumn中的超級鏈接的 URL 的顯示格式,即要鏈接到的下一級處理頁面,在此為listdir.aspx?dir={用戶點擊行的邏輯驅(qū)動器名稱}