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