Cuando utiliza el objeto FILESYSTEMOBJECT para obtener una lista de archivos en un directorio, ¿ha descubierto que no puede controlar la forma en que se ordenan, como ordenar por nombre, ordenar por extensión, ordenar por tamaño de archivo, etc. Intentemos use una matriz para Están organizados en orden.
Si desea ordenar por nombre, será muy simple, pero si desea ordenar por tamaño de archivo o hora de creación del archivo, etc., será un poco problemático. Haremos esto a través de una matriz 2D.
El siguiente código demuestra cómo lograr nuestro objetivo seleccionando y ordenando. Haga clic para ordenar y haga clic dos veces para ordenar a la inversa.
<HTML> <CABEZA> <TITLE>Demostración de clasificación de archivos</TITLE> </CABEZA> <CUERPO> <% 'Establecer un directorio de demostración, :) DIRECTORIO CONST = / 'Utiliza constantes para definir el método de clasificación. CONST FILE_NAME = 0 'Ordenar por nombre...y así sucesivamente ARCHIVO CONSTANTE_EXT = 1 CONST FILE_TYPE = 2 CONST FILE_SIZE = 3 ARCHIVO CONSTANTE_CREADO = 4 CONST FILE_MODIFIED = 5 CONST ARCHIVO_ACCESO = 6 'Obtiene el comando de clasificación, el valor predeterminado es ordenar por nombre req = Solicitud (ordenar por) Si Len(req) < 1 Entonces sortBy = 0 De lo contrario sortBy = CInt(req) req = Solicitud (ordenación previa) Si Len(req) < 1 Entonces priorSort = -1 De lo contrario, priorSort = CInt(req) 'Establecer orden inverso Si sortBy = priorSort Entonces reverso = verdadero clasificación anterior = -1 Demás reverso = falso clasificación anterior = ordenar por Terminar si ' A continuación comenzamos nuestro código real. . . ruta = Server.MapPath(DIRECTORIO) Establecer fso = CreateObject(Scripting.FileSystemObject) Establecer theCurrentFolder = fso.GetFolder(ruta) Establecer curFiles = theCurrentFolder.Files 'Haz un bucle sobre estos archivos Atenuar los archivos() ReDim theFiles(500) 'Establecí un tamaño aleatorio currentSlot = -1 'comienza antes del primer espacio 'Ponemos toda la información relevante del archivo en el array Para cada elemento de archivo en curFiles fname = fileItem.Nombre fext = InStrRev(fnombre, .) Si fext < 1 Entonces fext = De lo contrario fext = Mid(fname,fext+1) ftype = archivoItem.Type fsize = fileItem.Tamaño fcreate = fileItem.FechaCreada fmod = fileItem.FechaÚltimaModificación faccess = fileItem.FechaÚltimaAcceso ranura actual = ranura actual + 1 Si currentSlot > UBound(theFiles) Entonces ReDim Preservar los archivos (ranura actual + 99) Terminar si 'Ponlo en la matriz theFiles(currentSlot) = Array(fname,fext,ftype,fsize,fcreate,fmod,faccess) Próximo 'Ahora que todo está en la matriz, comienza el siguiente paso fileCount = currentSlot 'Número de archivos ReDim Preservar los archivos (ranura actual) ' Clasificar ' (8 significa cadena) Si VarType(theFiles(0)(sortBy)) = 8 Entonces Si es inverso Entonces tipo = 1 De lo contrario tipo = 2 ' Ordenar caracteres Demás Si es al revés Entonces tipo = 3 De lo contrario tipo = 4 'Número, hora. . . Terminar si Para i = fileCount TO 0 Paso -1 minmax = theFiles(0)(ordenar por) minmaxSlot = 0 Para j = 1 A i Seleccione tipo de caso Caso 1 marca = (strComp(theFiles(j)(sortBy), minmax, vbTextCompare) < 0) Caso 2 marca = (strComp(theFiles(j)(sortBy), minmax, vbTextCompare) > 0) Caso 3 marca = (theFiles(j)(sortBy) < minmax) Caso 4 marca = (theFiles(j)(sortBy) > minmax) Seleccionar fin Si marca entonces minmax = theFiles(j)(ordenar por) minmaxSlot = j Terminar si Próximo Si minmaxSlot <> i Entonces temp = los archivos (minmaxSlot) losArchivos(minmaxSlot) = losArchivos(i) losArchivos(i) = temporal Terminar si Próximo ' Finalizar %> <Nombre FORMULARIO=método ordenar=Obtener> <Tipo de ENTRADA=Nombre oculto=Valor de clasificación anterior=<% = % de clasificación anterior>> <Tipo de ENTRADA=Nombre oculto=ordenar por valor=-1> </FORM> <Lenguaje SCRIPT=JavaScript> función reordenar(cuál) { document.doSort.sortBy.value = cuál; documento.doSort.submit(); } </SCRIPT> <CENTRO> <Tamaño de fuente=+2> Mostrar <% = (fileCount+1) %> archivos en este directorio <% = ruta %> </FONT> <P> Haga clic en Ordenar y haga clic en Ordenar en orden inverso nuevamente <P> <Borde de TABLA=1 Relleno de celda=3> <TR> <TH><A HREF=javascript:reSort(0);>Nombre de archivo</A></TH> <TH><A HREF=javascript:reSort(1);>Extensión</A></TH> <TH><A HREF=javascript:reSort(2);>Tipo</A></TH> <TH><A HREF=javascript:reSort(3);>Tamaño</A></TH> <TH><A HREF=javascript:reSort(4);>Hora de creación</A></TH> <TH><A HREF=javascript:reSort(5);>Hora de la última modificación</A></TH> <TH><A HREF=javascript:reSort(6);>Última hora de acceso</A></TH> </TR> <% Para i = 0 Para fileCount Respuesta.Escribir <TR> y vbNewLine Para j = 0 a UBound(theFiles(i)) Respuesta.Escribir <TD> & theFiles(i)(j) & </TD> & vbNewLine Próximo Respuesta.Escribir </TR> & vbNewLine Próximo %> </TABLA> </CUERPO> </HTML> |