Когда вы используете объект FILESYSTEMOBJECT для получения списка файлов в каталоге, вы обнаружили, что не можете контролировать способ их сортировки, например сортировку по имени, сортировку по расширению, сортировку по размеру файла и т. д. Давайте попробуем используйте массив, чтобы они расположены по порядку.
Если вы хотите отсортировать по имени, это будет очень просто, но если вы хотите отсортировать по размеру файла или времени создания файла и т. д., то это будет немного хлопотно. Мы сделаем это через 2D-массив.
Следующий код демонстрирует, как достичь нашей цели путем выбора и сортировки. Нажмите, чтобы отсортировать, и дважды щелкните, чтобы отсортировать в обратном порядке.
<HTML> <ГОЛОВКА> <TITLE>Демонстрация сортировки файлов</TITLE> </HEAD> <ТЕЛО> <% 'Установим демо-каталог, :) КОНСТ-КАТАЛОГ = / 'Используем константы для определения метода сортировки CONST FILE_NAME = 0 'Сортировать по имени... и т.д. КОНСТ ФАЙЛ_ЭКСТ = 1 КОНСТ ФАЙЛ_ТИП = 2 CONST FILE_SIZE = 3 КОНСТ ФАЙЛ_СОЗДАН = 4 КОНСТ ФАЙЛ_МОДИФИЦИРОВАННЫЙ = 5 КОНСТ ФАЙЛ_ДОСТУП = 6 'Получить команду сортировки, по умолчанию используется сортировка по имени req = Запрос (сортировка по) Если Len(req) < 1 Тогда sortBy = 0 Иначе sortBy = CInt(req) req = Запрос (предыдущая сортировка) Если Len(req) < 1 Тогда PriorSort = -1 Иначе PriorSort = CInt(req) 'Установить обратный порядок Если sortBy = PriorSort Тогда обратный = правда предыдущая сортировка = -1 Еще обратный = ложь предыдущая сортировка = сортировка по Конец, если ' Далее мы запускаем наш настоящий код. . . путь = Server.MapPath(КАТАЛОГ) Установите fso = CreateObject(Scripting.FileSystemObject) Установите theCurrentFolder = fso.GetFolder(путь) Установите curFiles = theCurrentFolder.Files 'Сделать цикл по этим файлам Затемнить файлы() ReDim theFiles(500) 'Я устанавливаю случайный размер currentSlot = -1 'начинается перед первым слотом 'Мы помещаем всю необходимую информацию о файле в массив Для каждого элемента файла в curFiles fname = элемент_файла.Имя fext = InStrRev(fname, .) Если fext < 1, то fext = Иначе fext = Mid(fname,fext+1) ftype = fileItem.Type fsize = fileItem.Size fcreate = fileItem.DateCreated fmod = fileItem.DateLastModified faccess = fileItem.DateLastAccessed текущий слот = текущий слот + 1 Если currentSlot > UBound(theFiles), Тогда ReDim Preserve theFiles (currentSlot + 99) Конец, если 'Помещаем его в массив theFiles(currentSlot) = Array(fname,fext,ftype,fsize,fcreate,fmod,faccess) Следующий 'Теперь, когда все есть в массиве, приступаем к следующему шагу fileCount = currentSlot 'Количество файлов ReDim Preserve theFiles (currentSlot) ' Сортировать ' (8 означает строку) Если VarType(theFiles(0)(sortBy)) = 8 Тогда Если наоборот, то kind = 1 Else kind = 2 ' Сортировка символов Еще Если наоборот, то kind = 3 Else kind = 4 'Число, время. . . Конец, если Для i = fileCount TO 0 Шаг -1 minmax = theFiles(0)(sortBy) минмаксслот = 0 Для j = 1 К i Выберите тип дела Случай 1 mark = (strComp(theFiles(j)(sortBy), minmax, vbTextCompare) <0) Случай 2 mark = (strComp(theFiles(j)(sortBy), minmax, vbTextCompare) > 0) Случай 3 mark = (theFiles(j)(sortBy) <minmax) Случай 4 mark = (theFiles(j)(sortBy) > minmax) Конец выбора Если отметить Тогда minmax = theFiles(j)(sortBy) минмаксслот = j Конец, если Следующий Если minmaxSlot <> i Тогда temp = theFiles(minmaxSlot) theFiles(minmaxSlot) = theFiles(i) theFiles(i) = temp Конец, если Следующий ' Заканчивать %> <Имя ФОРМЫ=Метод doSort=Получить> <Тип ВХОДА=Скрытое имя=Значение PriorSort=<% = PriorSort %>> <Тип ВХОДА=Скрытое имя=сортировка по значению=-1> </ФОРМ> <Язык СКРИПТА=JavaScript> функция reSort(которая) { document.doSort.sortBy.value = который; документ.doSort.submit(); } </СКРИПТ> <ЦЕНТР> <Размер ШРИФТА=+2> Отобразить <% = (fileCount+1) %> файлов в этом каталоге <% = путь %> </FONT> <П> Нажмите «Сортировать» и еще раз нажмите «Обратная сортировка». <П> <Граница ТАБЛИЦЫ=1 CellPadding=3> <ТР> <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> <% Для i = 0 в fileCount Response.Write <TR> и vbNewLine Для j = 0 To UBound(theFiles(i)) Response.Write <TD> & theFiles(i)(j) & </TD> & vbNewLine Следующий Response.Write </TR> и vbNewLine Следующий %> </ТАБЛИЦА> </ТЕЛО> </HTML> |