文章·资料 电脑软件 手机应用 网站源码




    本 站 搜 索
   推 荐 文 章        More...
华硕易电脑(ASUS Eee PC 1025C..
先来段开场白:为了外出携带方便,到淘..
Acronis True Image 使用说明
  一款可以在Windows下使用全部功..
Norton Ghost 使用详解
一、分区备份   使用Ghost进行系..
    文 章 阅 读 排 行
手机视频监控 APP 关闭广告:萤..
一、萤石云视频:我的,设置,隐私设置,..
常见数据库介绍与对比(SQL Serv..
常见数据库的对比分析,涵盖你提到的 A..
Windows 系统修改默认文件类型..
Windows 系统文件类型图标,通常由默..
Windows 系统安装或备份时 ISO,..
【ISO 文件】 ISO 文件其实就是光..
Microsoft SQL Server 2000 Per..
  对于第一次安装 Microsoft SQL Se..
颜色与英文单词对照
颜色与英文单词对照 red green bl..
PakePlus 构建 APP 需要 Github..
PakePlus 是一个基于 Rust Tauri 的..
主页真的越Google、越简洁越好吗
  如果你在11月10日早上打开雅虎中..
网络工程师必懂的专业术语
路由器问题:1、什么时候使用多路由协..
为啥现在的电脑都不能安装 Wind..
说实话,这几年如果你尝试在新电脑..
 文 章 信 息
ASP(FSO)通过数组给文件列表排序
评论()〗〖留言〗〖收藏
〖文章分类:电脑·手机·网络 / 网站设计·开发·优化〗〖阅读选项
  当您使用FILESYSTEMOBJECT(fso)对象获得某个目录下的文件列表的时候,你有没有发现无法控制它们的排序方式,比如按照名字排序,按照扩展名排序,按照文件大小排序等等,让我们试着用数组给它们排排序儿。

  如果您想通过名字排序,那将是非常简单的,但是假如你想通过文件大小或者文件创立时间等等来排序的时候,那么将有点麻烦。我们将通过二维数组做到这一点。

  下面的代码演示了如何通过选择排序方式达到的我们目的,单击排序,点两次就反着排了。

<HTML> 
<HEAD> 
<TITLE>文件排序演示</TITLE> 
</HEAD> 
<BODY> 
<% 
' 设定一个演示目录,:) 
CONST DIRECTORY = "/" 
' 用常数定义排序方式 
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 
'获得 排序命令,默认为按照名字排序 
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) 
'设置倒序 
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 
' 给这些文件做一个循环 
Dim theFiles( ) 
ReDim theFiles( 500 ) ' 我随便定的一个大小 
currentSlot = -1 ' start before first slot 
' 我们将文件的所有相关信息放到数组里面 
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 
' 放到数组里 
theFiles(currentSlot) = Array(fname,fext,ftype,fsize,fcreate,fmod,faccess) 
Next 
' 现在都在数组里了,开始下一步 

fileCount = currentSlot ' 文件数量 
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 '数字、时间。。。 
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 
' 结束 
%> 
<FORM Name="doSort" Method="Get"> 
<INPUT Type=Hidden Name=priorSort Value="<% = priorSort %>"> 
<INPUT Type=Hidden Name=sortBy Value="-1"> 
</FORM> 
<SCRIPT Language="JavaScript"> 
function reSort( which ) 

document.doSort.sortBy.value = which; 
document.doSort.submit( ); 

</SCRIPT> 
<CENTER> 
<FONT Size="+2"> 
显示<% = (fileCount+1) %> 该目录下的文件<% = path %> 
</FONT> 
<P> 
单击排序,再点一次反向排序 
<P> 
<TABLE Border=1 CellPadding=3> 
<TR> 
<TH><A HREF="javascript:reSort(0);">文件名</A></TH> 
<TH><A HREF="javascript:reSort(1);">扩展名</A></TH> 
<TH><A HREF="javascript:reSort(2);">类型</A></TH> 
<TH><A HREF="javascript:reSort(3);">大小</A></TH> 
<TH><A HREF="javascript:reSort(4);">建立时间</A></TH> 
<TH><A HREF="javascript:reSort(5);">上次修改时间</A></TH> 
<TH><A HREF="javascript:reSort(6);">上次存取时间</A></TH> 
</TR> 
<% 
For i = 0 To fileCount 
Response.Write "<TR>" & vbNewLine 
For j = 0 To UBound( theFiles(i) ) 
Response.Write " <TD>" & theFiles(i)(j) & "</TD>" & vbNewLine 
Next 
Response.Write "</TR>" & vbNewLine 
Next 
%> 
</TABLE> 
</BODY> 
</HTML>

文章作者:未知  更新日期:2008-03-07
〖文章浏览:〗〖发送文章〗〖打印文章
相关文章 ·ASP(FSO)文件列表排序2008-03-07