天天看點

ASP.NET設計網絡硬碟之檔案夾實作

在介紹“網絡硬碟”概念時已經提到,每個使用者在“網絡硬碟”上都有自己的一塊空間。在下面程式設計中是這樣處理的:為使用者提供一個固定的檔案夾,在這個檔案夾下使用者可以自己增加/删除新的檔案夾或檔案。如圖1所示,首次打開網頁時将列出該檔案夾下的所有内容(包括檔案和檔案夾)。如果想進入下一級檔案夾,可以選中該檔案夾,單擊“打開”按鈕進入。下面将就檢視檔案夾内容功能的實作分步驟進行說明。

圖1使用者主界面

1.頁面加載

由于程式所提供的使用者目錄是固定的,如c:/userdir,而且要求在頁面加載後顯示該檔案夾所有内容,是以需要在page_load中進行相應操作:首先要判斷該檔案夾是否存在,如果不存在需要先建立它;然後再列出該檔案夾下的内容,其代碼實作如下:

privatevoidpage_load(objectsender,system.eventargse)

{

 //在此處放置使用者代碼以初始化頁面

 if(page.ispostback==false)

 {

currentpath=@"c:/userdir/";//設定目前目錄

if(directory.exists(@"c:/userdir/")==false)//若該目錄不存在,建立該目錄

 directory.createdirectory(@"c:/userdir/");

 loaddir(currentpath);//初始化裝入目錄

 }

}

loaddir(stringfullpath)方法用來列出該檔案夾下的所有内容,其代碼如下:

privatevoidloaddir(stringfullpath)

 currentpath=fullpath;

 arraylistvalues=newarraylist();

 string[]myfiles,mydirs;

 myfiles=directory.getfiles(fullpath);//得到該目錄下所有檔案

 if(currentpath!=@"c:/userdir")//若不是頂級目錄,增加“傳回上級目錄”選項{

values.add("傳回上級目錄");

 values.addrange(myfiles);//加入檔案

 mydirs=directory.getdirectories(fullpath);//得到該目錄下所有目錄

 values.addrange(mydirs);//加入目錄

 filelist.datasource=values;//設定資料源

 filelist.databind();//綁定資料

首先要定義一個arraylist數組對象values,用以存放頂級目錄下的所有内容(包括檔案夾名和檔案名)。directory.getfiles()方法傳回頂級目錄下的所有檔案名,其傳回類型為一個string數組,故需要定義一個string類對象myfiles來儲存傳回的檔案名;directory.getdirectories()傳回頂級目錄下的所有檔案夾名稱,同樣定義一個string數組對象mydirs來儲存它們。完成這些後就可以把myfiles和mydirs數組添加進values對象了。最後要做的隻是為listbox控件對象filelist添加資料源和綁定資料。有一點需要說明:如果目前目錄不是頂級目錄,則需要能傳回到上級目錄,為此需要在filelist中添加“傳回上級目錄”選項。

2.多級目錄檢視

通過上一部分列出的兩段代碼,就可以完成在頁面加載時列出頂級目錄下的所有内容。當然列出頂級目錄下的内容還是不夠的,和windows作業系統類似,網絡硬碟中檔案夾目錄也是嵌套的,存在二級或者多級檔案夾目錄。為此要進行一些相應的處理,使得使用者可以檢視多級檔案夾目錄内容。前面界面設計中提供了一個“打開”按鈕,使用者選擇相應的檔案夾後,單擊該按鈕就可以檢視該檔案夾下的内容。

下面就為“打開”按鈕添加代碼。在“設計”面闆中輕按兩下該按鈕,系統就會自動為其添加事件,其代碼内容如下:

privatevoidbtnopen_click(objectsender,system.eventargse)

 if(filelist.selecteditem.text=="傳回上級目錄")//傳回上級目錄

stringparentpath=directory.getparent(currentpath).tostring();

loaddir(parentpath);

return;

 else//打開目錄

loaddir(filelist.selecteditem.text);

程式首先判斷使用者選中的是不是“傳回上級目錄”。如果是的話,則要先通過directory.getparent()方法傳回上級檔案夾名稱,然後再調用loaddir()方法來顯示該目錄下的内容;如果使用者選中的不是“傳回上級目錄”而是一個檔案夾名稱,則可以直接調用loaddir()方法,filelist.selecteditem.text為選中的檔案夾名,用來作為loaddir()方法的參數。

繼續閱讀