ASP檢索網站指定目錄文件的算法與應用方向
發表時間:2024-06-10 來源:明輝站整理相關軟件相關文章人氣:
[摘要]在我們許多網站中存在這樣一個問題,就是鏈接的維護更新,這是一項工作量很大的工作,若不是的專門工作人員進行維護的大型網站,普通站點的站點更新維護工作基本上都成了一個很令人頭疼的問題,特別是在沒有很多人手的情況下,要經常維護更新鏈接更是討厭,因為這項工作沒有多少創意,卻很耗時,而JACK顯然不是那種喜...
在我們許多網站中存在這樣一個問題,就是鏈接的維護更新,這是一項工作量很大的工作,若不是的專門工作人員進行維護的大型網站,普通站點的站點更新維護工作基本上都成了一個很令人頭疼的問題,特別是在沒有很多人手的情況下,要經常維護更新鏈接更是討厭,因為這項工作沒有多少創意,卻很耗時,而JACK顯然不是那種喜歡花費大量時間在一件沒創意的事情上的那種人,與是,JACK想出了一個ASP的程序原型,讓它來完成我們所討厭的工作吧!
現在我們假設你有這樣一項網站維護任務,就是要把每個月的經濟評論分門別類地鏈接起來供大家查看,這些評論涉及了經濟運行的各個方面,可能有國內生產總值的,有物價指數的,有工業發展情況的,并且它們有一個共同的特征,就是他們的文件名就代表了各自評論的內容,例:《XX市1999年國內生產總值完成情況分析》,在這么多合適的假設下(嘻,假設幾乎多過了薩繆爾森的經濟學了。,我們偷賴的機會來了!我們只要把這些文件拷入評論這個目錄相應的子目錄,然后寫一個ASP頁面,它所完成的功能就是檢索指定目錄下面的文件,并檢索結果做成可供點擊的鏈接,那么我們應該怎么寫呢?
很簡單,我們只要讓ASP給出指定目錄下的文件名集合,并遍歷這個集合,把集合的每個元素做成相應的鏈接供大家選擇就行啦!另外,若要在全部經濟類別內查詢所有含有某特征字符串的文件名的文件呢?小CASE啦!你只要把檢索文件的函數放入到一個遞歸的目錄檢索函數中就行啦。ㄎ,不要告訴我你不會遞歸。。
這樣,我們同樣可以寫出一個點歌系統(嘻,我喜歡聽MP3)把歌手做成目錄名,把歌曲加上中文名稱,一切就OK啦!想聽帶“愛”的歌?OK!打入愛字!你就能找出所有帶愛的歌了。ū热缯f:愛你愛到骨頭里!嘻,排骨樂隊!JACK主唱。
另外,你加上擴展代碼(刪除指定文件的代碼),若配合UPLOAD的ASP代碼,你甚至可以寫出一個遠程的WEB維護系統呢!當然,這種事情JACK是不做的!ASP不夠完美,對二進制的文件讀寫無能為力!所以只能操作文本文件,嘻嘻,美夢泡湯了?不要緊,用VC啦!寫ISAPI能做到呢!
下面的代碼,由于注釋很完整(JACK一下午不上網才寫出來的呢!嘻,不知又有多少MM在CHAT里等我等得心痛了呢。揖筒欢嗾f了,請大家自己分析啦!
<%
'從FORM變量集得到要查詢的文件名稱所要包含的字符串
data=request.form("search_data")
'調用函數查詢目標查詢目錄下的所有子目錄(所有子樹)
'函數調用的規則:search_folder(要查詢的字符串,查詢目標的虛擬絕對路徑,查詢目標的真實絕對路徑)
p=search_folder(data,"http://jack/cgi-bin","c:\webshare\wwwroot\cgi-bin")
%>
<script language="vbscript" RUNAT=SERVER>
'目錄檢索函數
function search_folder(search_data,v_path,c_path)
dim file_system,cur_folder,sub_folders,sub_files
'確定查詢字符串有效非空
if not isempty(search_data) and len(search_data)>0 then
'建立文件系統對象
set file_system=createobject("scripting.filesystemobject")
'建立建立當前目錄對象
set cur_folder=file_system.getfolder(c_path)
'建立當前目錄的子目錄對象集合
set sub_folders=cur_folder.subfolders
'對子目錄集合進行遍歷
for each each_sub_folder in sub_folders
'確定子目錄的屬性為普通子目錄
if each_sub_folder.attributes=16 then
'得到當前的子虛擬絕對路徑與真實絕對路徑
'注:此程序默認子目錄與子虛擬目錄為同一級別且名稱一致.
sub_v_path=v_path&"/"&each_sub_folder.name
sub_c_path=c_path&""&each_sub_folder.name
'調用文件檢索函數對當前子目錄下的文件進行字符串匹配檢索
p=search_file(search_data,sub_v_path,sub_c_path)
'遞歸檢索當前子目錄的下一級目錄
p=search_folder(search_data,sub_v_path,sub_c_path)
end if
next
'清除所有服務器端對象
set each_sub_folder=nothing
set sub_folders=nothing
set cur_folder=nothing
set file_system=nothing
end if
end function
'********************************
'文件匹配檢索函數
function search_file(search_data,v_path,c_path)
dim file_system,sub_files,sub_file_v_path,sub_out_v_path
'確認路徑不為空
if not isempty(c_path) then
set file_system=createobject("scripting.filesystemobject")
set cur_folder=file_system.getfolder(c_path)
'建立檢索目錄下的文件對象集合
set sub_files=cur_folder.files
'遍歷文件對象集合
for each each_file in sub_files
'匹配字符串與文件名
if instr(each_file.name,search_data)<>0 then
'建立可用鏈接,輸出匹配文件
sub_file_v_path=v_path&"/"&each_file.name
'替換路徑及文件名中可能出現的空格,以便WEB能正常確定路徑
sub_out_v_path=Replace(sub_file_v_path," ","%20")
response.write("<p><a href="&sub_out_v_path&">"&sub_file_v_path&"</a>")
end if
next
set sub_out_v_path=nothing
set sub_file_v_path=nothing
set each_file=nothing
set sub_files=nothing
set file_system=nothing
end if
end function
</script>