Учебная работа. Статья: Представление в Internet содержимого каталога средствами ASP

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (5 оценок, среднее: 4,80 из 5)
Загрузка...
Контрольные рефераты

Учебная работа. Статья: Представление в Internet содержимого каталога средствами ASP



Христофоров Юрий

В данной статье я на примере расскажу, как используя ASP (Active Server Pages) можно выстроить содержимое каталога Web аналогично тому, как это смотрится на FTP сервере.

Постановка задачки: На Web-сервере есть каталог, к примеру: C:InetPubwwwrootUser1. Пусть данный каталог имеет несколько вложенных каталогов и набор файлов в этих каталогах. Примерная структура папок представлена на Рис. 1.

Рис. 1.

В любом из представленных на рисунке каталогах может находиться неограниченное количество файлов, или некие из каталогов могут быть пустыми. нужно представить содержимое папки user1 на Web-странице в дружеском для юзера виде.

Увлекательной индивидуальностью скрипта будет то, что применяя страничку с фреймами (кадрами), можно выстроить меню юзера.

Итог должен смотреться приблизительно последующим образом:

Находимся в папке C:InetpubwwwrootUser1folder1subfolder2:

На данном снимке экрана показан пример меню. Страничка menu.htm разбита на два фрейма. В левом фрейме находится файл list_files.asp, а правый фрейм употребляется для отображения файлов, ссылки на которые находятся в левом фрейме. В левом фрейме можно свободно передвигаться по папкам. Т.о. можно организовать меню юзера.

Решение: Ключ к решению данной задачки — это внедрение MicrosoftR Scripting Library. Нас будет заинтересовывать таковой объект данной библиотеки, как FileSystemObject. FileSystemObject предоставляет объектную модель доступа к файловой системе. Дальше, пользуясь средствами языка написания сценариев VBScript, выполняемого на Web-сервере, можно написать одну ASP-страницу, которая будет делать всю работу. Итак, приступим.

Листинг файла list_files.asp:

<%Response.Expires=0%> ‘Отключаем кэширование странички

<HTML>

<BODY>

<!-Серверныйсценарий

<%

Dim root_folder, root_vfolder, curr_dir, curr_dir2, temp_arr

‘root_folder — переменная для хранения физического пути к корневой папке User1

root_folder = «c:inetpubwwwrootUser1″

‘root_vfolder — переменная для хранения виртуального пути к папке User1

‘localhost — имя Вашего сервера

root_vfolder = «HTTP://localhost/user1″

‘curr_dir2 — имя текущей (активной) папки

curr_dir2 = Request.QueryString(«dir») ‘Имяполучаемиз URL

‘curr_dir — полный физический путь к текущей папке. Выходит конкатенацией строк, ‘содержащихся в переменных root_folder и curr_dir2.

curr_dir = root_folder & curr_dir2

‘temp_arr — временный массив

‘Получаем массив, содержащий наименования каталогов текущей папки.

temp_arr = ShowDirList(curr_dir)

‘Сортируеммассивстрок

temp_arr = SortStr(temp_arr)

%>

<table border=0>

<%

‘Вызов процедуры, осуществляющей вывод заглавий подкаталогов текущего каталога.

Call Main_Print(temp_arr,1)

‘Получаем массив, содержащий названия файлов текущей папки.

temp_arr = ShowFilesList(curr_dir)

‘Сортируеммассивстрок

temp_arr = SortStr(temp_arr)

‘Вызов процедуры, осуществляющей вывод названий файлов текущего каталога.

Call Main_Print(temp_arr,0)

%>

</table>

<%

‘Чистка содержимого массива

Erase temp_arr




Дальше следует текст функций и процедур, применяемых в сценарии.

Функции: ShowFilesList — возвращает массив, содержащий названия файлов текущей папки.

ShowDirList — возвращает массив, содержащий наименования каталогов текущей папки.

SortStr — сортирует массив строк.

Процедура: Main_Print — производит вывод в html-формате содержимое текущего каталога.

Продолжение листинга файла list_files.asp:

Function ShowFilesList(folder)

Dim fs, f, f1, fc, i

‘Определяем динамический массив для хранения названий файлов

ReDim farr(0)

‘СоздаемобъектFileSystemObject

Set fs = CreateObject(«Scripting.FileSystemObject»)

Set f = fs.GetFolder(folder)

Set fc = f.Files

i=0

‘В цикле заполняем массив названиями файлов текущей папки

For Each f1 In fc

farr(i) = LCase(CStr(f1.Name)) ‘Преобразуем имя к нижнему регистру знаков

i = i + 1

‘Увеличениеразмерамассива

ReDim Preserve farr(i)

Next

‘Возвращаемрезультат

ShowFilesList = farr

End Function




Function ShowDirList(folder)

Dim fs, f, f1, fc, i

‘Определяем динамический массив для хранения заглавий каталогов

ReDim dirarr(0)

Set fs = CreateObject(«Scripting.FileSystemObject»)

Set f = fs.GetFolder(folder)

Set fc = f.SubFolders

i=0

‘В цикле заполняем массив именами каталогов текущей папки

For Each f1 In fc

dirarr(i) = LCase(CStr(f1.Name))

i = i + 1

ReDim Preserve dirarr(i)

Next

‘Возвращаемрезультат

ShowDirList = dirarr

End Function




Function SortStr(arr)

Dim t,i,j

‘Сортировка способом «пузырька»

‘UBound — возвращает верхний индекс массива

For j = 0 To UBound(arr)-1

For i = j + 1 To UBound(arr)-1

‘StrComp — ассоциирует две строчки

‘Возвращает «-1», если строка1 < строка2; «0», если строка1=строка2; «1», если строка1 >

‘ строка2.

If StrComp(CStr(arr(i)), CStr(arr(j)), vbTextCompare) < 0 Then

t = arr(j)

arr(j) = arr(i)

arr(i) = t

End If

Next

Next

‘Возвращаемрезультат

SortStr = arr

End Function




Sub Main_Print(arr,flag)

‘flag = 1 — вывод для каталогов

‘flag = 0 — вывод для файлов

Dim i,k,tmp

i = 0

Select Case flag

Case 1

‘Если находимся в подкаталоге, то нужно предугадать возможность возвратиться

‘на уровень выше

If curr_dir2 <> «» Then

‘Отыскиваем крайнее вхождение знака разделителя каталогов «»

k = InStrRev(curr_dir2,»»)

If k <> 0 Then

‘Получаем имя каталога верхнего уровня

tmp = Mid(curr_dir2,1,k-1)

Response.Write «<tr>» ‘Вывод html

‘Для декорации используем графический файл open.gif — изображение открытой папки.

Response.Write «<td><img src=’open.gif’></td>»

‘Формируемссылкунаверхнийкаталог

Response.Write «<td><a target="_blank" href=’list_files.asp?dir=» & tmp & «‘>» & » .. » & «</a></td></tr>»

End If

End If

‘Главный цикл вывода заглавий каталогов

For i = 0 To UBound(arr)-1

Response.Write «<tr>»

Response.Write «<td><img src=’close.gif’></td>»

Response.Write «<td><a target="_blank" href=’ list_files.asp?dir=» & curr_dir2 & «» & arr(i) & «‘>» & arr(i) & _

«</a></td></tr>»

Next

‘Выводименфайлов

Case 0

‘Главный цикл вывода названий файлов

For i = 0 To UBound(arr)-1

Response.Write «<tr>»

Response.Write «<td><img src=’doc.gif’></td>»

‘Заменяем «» на «/» для использования в URL

‘Атрибут target нужен для указания ссылки на фрейм

Response.Write «<td><a target="_blank" href='» & root_vfolder & Replace(curr_dir2,»