此外,為了管理這些文件夾,你需要保留它們的設(shè)置信息:文件夾名、位置、受限操作類型、密碼及創(chuàng)建人等。程序中將這些信息寫入一Xml文件(此為folder.xml文件),隨后對文件夾的各種管理操作均通過讀寫該xml文件來進(jìn)行,以下方法就實(shí)現(xiàn)了新建文件夾時設(shè)置信息的存儲:
public void CreateXmlOrAddFrag(string xmlFullPath,string
folderFullPath,string owner,string password,int type){
XmlDocument xmlDoc=new XmlDocument();
string xml="";
string xmlNode="
xmlNode+="
xmlNode+=folderFullPath;
xmlNode+="
xmlNode+="
xmlNode+=owner;
xmlNode+="
xmlNode+="
xmlNode+=password;
xmlNode+="
xmlNode+="
xmlNode+=type;
xmlNode+="
xmlNode+="
if(!File.Exists(xmlFullPath)){//不存在則創(chuàng)建xml存儲文件
xml="";
xml+="
xml+=xmlNode;
xml+="
xmlDoc.LoadXml(xml);
xmlDoc.Save(xmlFullPath);//存儲文件
}
else{//存在xml存儲文件則添加新的文檔片段
xmlDoc.Load(xmlFullPath);
XmlDocumentFragment
docFrag=xmlDoc.CreateDocumentFragment();//文檔片元素節(jié)點(diǎn)
docFrag.InnerXml=xmlNode;
XmlNode currNode=xmlDoc.DocumentElement;//獲取文檔根節(jié)淀
currNode.InsertBefore(docFrag,currNode.FirstChild);//插入文檔段
xmlDoc.Save(xmlFullPath);//存儲改變
}
}
其中,參數(shù)fileFullPath是存儲文件夾信息的xml文件路徑,folderFullPath是此新文件夾路徑,owner是創(chuàng)建人名,password是密碼,type表示限制操作的類型("0"表示進(jìn)入受限,"1"表示刪除受限)。在程序運(yùn)行之初,存儲文件夾信息的folder.xml文件可能尚不存在,所以程序中首先判斷這個文件是否存在,不存在則動態(tài)創(chuàng)建這個文件,這之后新建文件夾時,將只需要添加文檔片段。這里,對Xml文件的讀寫通過DOM(文檔對象模型)來實(shí)現(xiàn),由于此處Xml文件不會太大,這種方式不會對內(nèi)存資源要求太高,速度也會很快!
3、對文件及文件夾的操作:
對文件的操作包括""和"刪除"兩種,在上面列表顯示指定文件夾中內(nèi)容時,針對文件,有這樣的語句:
dr[2]="";//建立聯(lián)接地址
其中,url是指定文件對應(yīng)的服務(wù)器路徑。 通過這樣的鏈接將文件定位到服務(wù)器上的對應(yīng)位置。視文件格式的不同,客戶端可以文件到本機(jī)上,也可以就在服務(wù)器上打開它。
刪除文件很簡單,.Net的IO命名空間的File類庫有這樣的方法:
File.Delete(string filename);其中,filename為文件的完整路徑
你需要注意的是,文件的刪除將不需要驗(yàn)證,要防止文件被刪除,你需要依照下面的方式來進(jìn)行。(當(dāng)然,程序中為避免文件誤刪除提供了確認(rèn)驗(yàn)證,文件夾刪除也一樣?。?
對文件夾的操作分為:進(jìn)入或者刪除。如果文件夾在創(chuàng)建時被設(shè)置"進(jìn)入受限"或者"刪除受限",用戶在執(zhí)行這樣的操作時將被要求密碼驗(yàn)證,只有通過驗(yàn)證才能完成相應(yīng)的操作,這種方式保護(hù)了你的文件被非法訪問或刪除。
相對文件的刪除,文件夾的刪除程序要稍微復(fù)雜些,.Net的Directory類庫提供的方法Delete()只能刪除空文件夾,這就需要我們首先清空文件夾中內(nèi)容,然后才能完成這一操作,由于文件夾中還可能再包含有文件夾,我們通過遞歸調(diào)用來實(shí)現(xiàn)這一操作:
//刪除文件夾的方法
public void DeleteFolder(string dir)
{
foreach(string d in Directory.GetFileSystemEntries(dir))
{
if(File.Exists(d))
File.Delete(d);//直接刪除其中的文件
else
DeleteFolder(d);//遞歸刪除子文件夾
}
Directory.Delete(dir);//刪除已空文件夾
}
其中,參數(shù)dir是待刪除文件夾的完整路徑。程序使用循環(huán)語句,查找文件夾中的內(nèi)容,是文件則直接刪除,如果是文件夾,則遞歸調(diào)用方法自身來刪除子文件夾,文件夾清空后再完成刪除操作。
4、文件上傳:
要實(shí)現(xiàn)網(wǎng)絡(luò)硬盤的功能,必須要有可供操作的文件,這些文件來自于客戶端的上傳(當(dāng)然,服務(wù)器端也能提供這些文件,但這不是網(wǎng)絡(luò)硬盤的重點(diǎn)),過去我們實(shí)現(xiàn)文件的上傳,在Asp中通常是使用第一些文件上傳組件,比如Microsoft 的PostingAcceptor組件,另外還有第三方提供的一些付費(fèi)組件(不過說真的,這些組件并不好用)。那時候想要自己開發(fā)這樣的文件上傳組件,相當(dāng)繁瑣;而現(xiàn)在,.Net提供的類庫HttpPostedFile和HttpFilesCollection可以很容易地訪問上載到服務(wù)器的文件,同時使開發(fā)人員控制文件上載過程。其中的HttpPostedFile類封裝已經(jīng)上傳到服務(wù)器的文件對象,其方法和屬性提供對每個文件的內(nèi)容和屬性的訪問;HttpFileCollection類則為多個HttpPostedFile對象提供一個容器,用作保存上傳給服務(wù)器的數(shù)據(jù)結(jié)構(gòu)的類,這樣你就可以利用被傳送的文件集合,該文件集合可通過其Files屬性從HttpRequest 對象訪問,一旦服務(wù)器接收了請求的整個內(nèi)容,該集合就可以訪問。這些內(nèi)置的組件使得Asp.net中實(shí)現(xiàn)文件上傳相當(dāng)容易,甚至只需要幾行代碼就可以了!關(guān)于Asp.net中實(shí)現(xiàn)文件上傳的文章很多,這里不做專門的闡述,需要的話你可以參考那些文章,這里,只提示你需要注意以下幾點(diǎn):
1)、客戶端表單的編碼類型Enctype 設(shè)置為multipart/form-data的MIME格式,提交表單使用Http的post方法,象下面這樣: