當(dāng)您使用filesystemobject對(duì)象獲得某個(gè)目錄下的文件列表的時(shí)候,你有沒有發(fā)現(xiàn)無法控制它們的排序方式,比如按照名字排序,按照擴(kuò)展名排序,按照文件大小排序等等,讓我們?cè)囍脭?shù)組給它們排排序兒。
如果您想通過名字排序,那將是非常簡(jiǎn)單的,但是假如你想通過文件大小或者文件創(chuàng)立時(shí)間等等來排序的時(shí)候,那么將有點(diǎn)麻煩。我們將通過二維數(shù)組做到這一點(diǎn)。
下面的代碼演示了如何通過選擇排序方式達(dá)到的我們目的,單擊排序,點(diǎn)兩次就反著排了。
文件排序演示
<%
' 設(shè)定一個(gè)演示目錄,:)
const directory = "/"
' 用常數(shù)定義排序方式
const file_name = 0 '按照名字排序……依次類推
const file_ext = 1
const file_type = 2
const file_size = 3
const file_created = 4
const file_modified = 5
const file_accessed = 6
'獲得 排序命令,默認(rèn)為按照名字排序
req = request("sortby")
if len(req) < 1 then sortby = 0 else sortby = cint(req)
req = request("priorsort")
if len(req) < 1 then priorsort = -1 else priorsort = cint(req)
'設(shè)置倒序
if sortby = priorsort then
reverse = true
priorsort = -1
else
reverse = false
priorsort = sortby
end if
' 接下來開始我們真正的代碼了。。。
path = server.mappath( directory )
set fso = createobject("scripting.filesystemobject")
set thecurrentfolder = fso.getfolder( path )
set curfiles = thecurrentfolder.files
' 給這些文件做一個(gè)循環(huán)
dim thefiles( )
redim thefiles( 500 ) ' 我隨便定的一個(gè)大小
currentslot = -1 ' start before first slot
' 我們將文件的所有相關(guān)信息放到數(shù)組里面
for each fileitem in curfiles
fname = fileitem.name
fext = instrrev( fname, "." )
if fext < 1 then fext = "" else fext = mid(fname,fext+1)
ftype = fileitem.type
fsize = fileitem.size
fcreate = fileitem.datecreated
fmod = fileitem.datelastmodified
faccess = fileitem.datelastaccessed
currentslot = currentslot + 1
if currentslot > ubound( thefiles ) then
redim preserve thefiles( currentslot + 99 )
end if
' 放到數(shù)組里
thefiles(currentslot) = array(fname,fext,ftype,fsize,fcreate,fmod,faccess)
next
' 現(xiàn)在都在數(shù)組里了,開始下一步
filecount = currentslot ' 文件數(shù)量
redim preserve thefiles( currentslot )
' 排序
' (8 表示 string)
if vartype( thefiles( 0 )( sortby ) ) = 8 then
if reverse then kind = 1 else kind = 2 ' 給字符排序
else
if reverse then kind = 3 else kind = 4 '數(shù)字、時(shí)間。。。
end if
for i = filecount to 0 step -1
minmax = thefiles( 0 )( sortby )
minmaxslot = 0
for j = 1 to i
select case kind
case 1
mark = (strcomp( thefiles(j)(sortby), minmax, vbtextcompare ) < 0)
case 2
mark = (strcomp( thefiles(j)(sortby), minmax, vbtextcompare ) > 0)
case 3
mark = (thefiles( j )( sortby ) < minmax)
case 4
mark = (thefiles( j )( sortby ) > minmax)
end select
if mark then
minmax = thefiles( j )( sortby )
minmaxslot = j
end if
next
if minmaxslot <> i then
temp = thefiles( minmaxslot )
thefiles( minmaxslot ) = thefiles( i )
thefiles( i ) = temp
end if
next
' 結(jié)束
%>
顯示<% = (filecount+1) %> 該目錄下的文件<% = path %>
單擊排序,再點(diǎn)一次反向排序
該文章在 2010/7/8 1:05:55 編輯過