当前位置: 首页 > 图文教程 > 网络编程 > ASP > 通过数组给您的文件排序

ASP
一个ASP版的图片浏览管理器
无组件上传图片至SQLSERVER数据库
利用Jmail.Message发送邮件
用Web页面执行客户端程序
多图片上传到指定的目录并存到数据库
dreamweaverMX通用分页代码研究
下拉菜单输入,根据输入内容自动定位
中文的无组件文件上传ASP函数
一个利用adsi得到局域网信息的asp文件
根据需要动态include不同的文件
让自定义文件下载支持断点续传
用数组实现数据记录的批量录入方法
上传的进度条 实时反映上传情况
用ASP动态生成javascript的表单验证代码
ASP 编程中20个非常有用的例子
ASP生成Word文档的又一方法
用asp解析图片地址,并将其保存。
利用ASP的文件操作实现用户管理
创建 Visual Basic COM 组件在 ASP 中使用
调试 ASP 中使用的 Visual Basic COM 组件

ASP 中的 通过数组给您的文件排序


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 107 ::
收藏到网摘: n/a

当您使用FILESYSTEMOBJECT对象获得某个目录下的文件列表的时候,你有没有发现无法控制它们的排序方式,比如按照名字排序,按照扩展名排序,按照文件大小排序等等,让我们试着用数组给它们排排序儿。
如果您想通过名字排序,那将是非常简单的,但是假如你想通过文件大小或者文件创立时间等等来排序的时候,那么将有点麻烦。我们将通过二维数组做到这一点。
下面的代码演示了如何通过选择排序方式达到的我们目的,单击排序,点两次就反着排了。
<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>