返回首页
当前位置: 主页 > 开发手册 > ASP > FSO >

FSO利用数组给您的文件排序

时间:2009-12-26 08:30来源:互联网 作者:网络 点击:
当您使用FILESYSTEMOBJECT对象获得某个目录下的文件列表的时候,你有没有发现无法控制它们的排序方式,比如按照名字排序,按照扩展名排序,按照文件大小排序等等,让我们试着用数组
  

当您使用FILESYSTEMOBJECT对象获得某个目录下的文件列表的时候,你有没有发现无法控制它们的排序方式,比如按照名字排序,按照扩展名排序,按照文件大小排序等等,让我们试着用数组给它们排排序儿。
如果您想通过名字排序,那将是非常简单的,但是假如你想通过文件大小或者文件创立时间等等来排序的时候,那么将有点麻烦。我们将通过二维数组做到这一点。

 

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

  1. <HTML>  
  2. <HEAD>  
  3. <TITLE>文件排序演示</TITLE>  
  4. </HEAD>  
  5. <BODY>  
  6. <%  
  7. ' 设定一个演示目录,:)  
  8. CONST DIRECTORY = "/"  
  9. ' 用常数定义排序方式  
  10. CONST FILE_NAME = 0 '按照名字排序……依次类推  
  11. CONST FILE_EXT = 1  
  12. CONST FILE_TYPE = 2  
  13. CONST FILE_SIZE = 3  
  14. CONST FILE_CREATED = 4  
  15. CONST FILE_MODIFIED = 5  
  16. CONST FILE_ACCESSED = 6  
  17. '获得 排序命令,默认为按照名字排序  
  18. req = Request("sortBy")  
  19. If Len(req) < 1 Then sortBy = 0 Else sortBy = CInt(req)  
  20. req = Request("priorSort")  
  21. If Len(req) < 1 Then priorSort = -1 Else priorSort = CInt(req)  
  22. '设置倒序  
  23. If sortBy = priorSort Then  
  24. reverse = true  
  25. priorSort = -1  
  26. Else  
  27. reverse = false  
  28. priorSort = sortBy  
  29. End If  
  30. ' 接下来开始我们真正的代码了。。。  
  31. path = Server.MapPath( DIRECTORY )  
  32. Set fso = CreateObject("Scripting.FileSystemObject")  
  33. Set theCurrentFolder = fso.GetFolder( path )  
  34. Set curFiles = theCurrentFolder.Files  
  35. ' 给这些文件做一个循环  
  36. Dim theFiles( )  
  37. ReDim theFiles( 500 ) ' 我随便定的一个大小  
  38. currentSlot = -1 ' start before first slot  
  39. ' 我们将文件的所有相关信息放到数组里面  
  40. For Each fileItem in curFiles  
  41. fname = fileItem.Name  
  42. fext = InStrRev( fname, "." )  
  43. If fext < 1 Then fext = "" Else fext = Mid(fname,fext+1)  
  44. ftype = fileItem.Type  
  45. fsize = fileItem.Size  
  46. fcreate = fileItem.DateCreated  
  47. fmod = fileItem.DateLastModified  
  48. faccess = fileItem.DateLastAccessed  
  49. currentSlot = currentSlot + 1  
  50. If currentSlot > UBound( theFiles ) Then  
  51. ReDim Preserve theFiles( currentSlot + 99 )  
  52. End If  
  53. ' 放到数组里  
  54. theFiles(currentSlot) = Array(fname,fext,ftype,fsize,fcreate,fmod,faccess)  
  55. Next  
  56. ' 现在都在数组里了,开始下一步  
  57.  
  58. fileCount = currentSlot ' 文件数量  
  59. ReDim Preserve theFiles( currentSlot )  
  60. ' 排序  
  61. ' (8 表示 string)  
  62. If VarType( theFiles( 0 )( sortBy ) ) = 8 Then  
  63. If reverse Then kind = 1 Else kind = 2 ' 给字符排序  
  64. Else  
  65. If reverse Then kind = 3 Else kind = 4 '数字、时间。。。  
  66. End If  
  67. For i = fileCount TO 0 Step -1  
  68. minmax = theFiles( 0 )( sortBy )  
  69. minmaxSlot = 0  
  70. For j = 1 To i  
  71. Select Case kind  
  72. Case 1  
  73. mark = (strComp( theFiles(j)(sortBy), minmax, vbTextCompare ) < 0)  
  74. Case 2  
  75. mark = (strComp( theFiles(j)(sortBy), minmax, vbTextCompare ) > 0)  
  76. Case 3  
  77. mark = (theFiles( j )( sortBy ) < minmax)  
  78. Case 4  
  79. mark = (theFiles( j )( sortBy ) > minmax)  
  80. End Select  
  81. If mark Then  
  82. minmax = theFiles( j )( sortBy )  
  83. minmaxSlot = j  
  84. End If  
  85. Next  
  86. If minmaxSlot <> i Then  
  87. temp = theFiles( minmaxSlot )  
  88. theFiles( minmaxSlot ) = theFiles( i )  
  89. theFiles( i ) = temp  
  90. End If  
  91. Next  
  92. ' 结束  
  93. %>  
  94. <FORM Name="doSort" Method="Get">  
  95. <INPUT Type=Hidden Name=priorSort Value="<% = priorSort %>">  
  96. <INPUT Type=Hidden Name=sortBy Value="-1">  
  97. </FORM>  
  98. <SCRIPT Language="JavaScript">  
  99. function reSort( which )  
  100. {  
  101. document.doSort.sortBy.value = which;  
  102. document.doSort.submit( );  
  103. }  
  104. </SCRIPT>  
  105. <CENTER>  
  106. <FONT Size="+2">  
  107. 显示<% = (fileCount+1) %> 该目录下的文件<% = path %>  
  108. </FONT>  
  109. <P>  
  110. 单击排序,再点一次反向排序  
  111. <P>  
  112. <TABLE Border=1 CellPadding=3>  
  113. <TR>  
  114. <TH><A HREF="javascript:reSort(0);">文件名</A></TH>  
  115. <TH><A HREF="javascript:reSort(1);">扩展名</A></TH>  
  116. <TH><A HREF="javascript:reSort(2);">类型</A></TH>  
  117. <TH><A HREF="javascript:reSort(3);">大小</A></TH>  
  118. <TH><A HREF="javascript:reSort(4);">建立时间</A></TH>  
  119. <TH><A HREF="javascript:reSort(5);">上次修改时间</A></TH>  
  120. <TH><A HREF="javascript:reSort(6);">上次存取时间</A></TH>  
  121. </TR>  
  122. <%  
  123. For i = 0 To fileCount  
  124. Response.Write "<TR>" & vbNewLine  
  125. For j = 0 To UBound( theFiles(i) )  
  126. Response.Write " <TD>" & theFiles(i)(j) & "</TD>" & vbNewLine  
  127. Next  
  128. Response.Write "</TR>" & vbNewLine  
  129. Next  
  130. %>  
  131. </TABLE>  
  132. </BODY>  
  133. </HTML>  

详细出处参考:http://www.jb51.net/article/3748.htm

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
推荐内容