Lorsque vous utilisez l'objet FILESYSTEMOBJECT pour obtenir une liste de fichiers dans un répertoire, avez-vous constaté que vous ne pouvez pas contrôler la façon dont ils sont triés, comme le tri par nom, le tri par extension, le tri par taille de fichier, etc. Essayons de utilisez un tableau pour les classer dans l'ordre.
Si vous souhaitez trier par nom, ce sera très simple, mais si vous souhaitez trier par taille de fichier ou heure de création de fichier, etc., ce sera un peu gênant. Nous ferons cela via un tableau 2D.
Le code suivant montre comment atteindre notre objectif en sélectionnant et en triant, puis en cliquant deux fois pour trier à l'envers.
<HTML> <TÊTE> <TITLE>Démonstration de tri de fichiers</TITLE> </HEAD> <CORPS> <% 'Définissez un répertoire de démonstration, :) RÉPERTOIRE CONST = / ' Utiliser des constantes pour définir la méthode de tri CONST FILE_NAME = 0 'Trier par nom...et ainsi de suite CONST FILE_EXT = 1 CONST FILE_TYPE = 2 CONST FILE_SIZE = 3 CONST FILE_CREATED = 4 CONST FILE_MODIFIED = 5 CONST FILE_ACCESSED = 6 'Obtenez la commande de tri, la valeur par défaut est de trier par nom req = Demande (tri par) Si Len(req) < 1 Alors sortBy = 0 Sinon sortBy = CInt(req) req = Demande (tri préalable) Si Len(req) < 1 Alors priorSort = -1 Sinon priorSort = CInt(req) 'Définir l'ordre inverse Si sortBy = priorSort Alors inverse = vrai tri préalable = -1 Autre inverse = faux tri préalable = trier par Fin si ' Ensuite, nous commençons notre vrai code. . . chemin = Server.MapPath (DIRECTORY) Définir fso = CreateObject (Scripting.FileSystemObject) Définir theCurrentFolder = fso.GetFolder (chemin) Définir curFiles = theCurrentFolder.Files 'Faire une boucle sur ces fichiers Atténuez les fichiers() ReDim theFiles(500) ' J'ai défini une taille aléatoire currentSlot = -1 'démarre avant le premier emplacement 'Nous mettons toutes les informations pertinentes du fichier dans le tableau Pour chaque élément de fichier dans curFiles fname = fichierItem.Name fext = InStrRev(fname, .) Si fext < 1 Alors fext = Else fext = Mid(fname,fext+1) ftype = fichierItem.Type fsize = fichierItem.Size fcreate = fileItem.DateCreated fmod = fileItem.DateLastModified faccess = fileItem.DateLastAccessed emplacementactuel = emplacementactuel + 1 Si currentSlot > UBound (theFiles) Alors ReDim préserve les fichiers (currentSlot + 99) Fin si 'Mettez-le dans le tableau theFiles (currentSlot) = Array (fname, fext, ftype, fsize, fcreate, fmod, faccess) Suivant 'Maintenant que tout est dans le tableau, passez à l'étape suivante fileCount = currentSlot 'Nombre de fichiers ReDim Préserve les fichiers (currentSlot) ' Trier ' (8 signifie chaîne) Si VarType(theFiles(0)(sortBy)) = 8 Alors Si inverse Alors kind = 1 Sinon kind = 2 ' Trier les caractères Autre Si inverse Alors genre = 3 Sinon genre = 4 'Nombre, heure. . . Fin si Pour i = fileCount TO 0 Étape -1 minmax = theFiles(0)(sortBy) minmaxSlot = 0 Pour j = 1 À je Sélectionnez le type de cas Cas 1 mark = (strComp(theFiles(j)(sortBy), minmax, vbTextCompare) < 0) Cas 2 mark = (strComp(theFiles(j)(sortBy), minmax, vbTextCompare) > 0) Cas 3 mark = (theFiles(j)(sortBy) < minmax) Cas 4 mark = (theFiles(j)(sortBy) > minmax) Fin de la sélection Si marque Alors minmax = theFiles(j)(sortBy) minmaxSlot = j Fin si Suivant Si minmaxSlot <> i Alors temp = les fichiers (minmaxSlot) lesFiles(minmaxSlot) = lesFichiers(i) lesFichiers(i) = temp Fin si Suivant ' Finition %> <FORM Name=doSort Method=Get> <INPUT Type=Nom caché=priorSort Value=<% = priorSort %>> <INPUT Type=Nom caché=sortBy Value=-1> </FORM> <Langage SCRIPT=JavaScript> fonction reSort(qui) { document.doSort.sortBy.value = lequel ; document.doSort.submit(); } </SCRIPT> <CENTRE> <Taille POLICE=+2> Afficher <% = (fileCount+1) %> fichiers dans ce répertoire <% = chemin %> </FONT> <P> Cliquez sur Trier, puis cliquez à nouveau sur Tri inversé. <P> <TABLE Border=1 CellPadding=3> <TR> <TH><A HREF=javascript:reSort(0);>Nom du fichier</A></TH> <TH><A HREF=javascript:reSort(1);>Extension</A></TH> <TH><A HREF=javascript:reSort(2);>Type</A></TH> <TH><A HREF=javascript:reSort(3);>Taille</A></TH> <TH><A HREF=javascript:reSort(4);>Heure de création</A></TH> <TH><A HREF=javascript:reSort(5);>Heure de la dernière modification</A></TH> <TH><A HREF=javascript:reSort(6);>Heure du dernier accès</A></TH> </TR> <% Pour i = 0 Vers fileCount Réponse.Write <TR> & vbNewLine Pour j = 0 Vers UBound(theFiles(i)) Response.Write <TD> & theFiles(i)(j) & </TD> & vbNewLine Suivant Réponse.Write </TR> & vbNewLine Suivant %> </TABLE> </CORPS> </HTML> |