Главная
Рефераты по рекламе
Рефераты по физике
Рефераты по философии
Рефераты по финансам
Рефераты по химии
Рефераты по хозяйственному праву
Рефераты по цифровым устройствам
Рефераты по экологическому праву
Рефераты по экономико-математическому моделированию
Рефераты по экономической географии
Рефераты по экономической теории
Рефераты по этике
Рефераты по юриспруденции
Рефераты по языковедению
Рефераты по юридическим наукам
Рефераты по истории
Рефераты по компьютерным наукам
Рефераты по медицинским наукам
Рефераты по финансовым наукам
Рефераты по управленческим наукам
Психология и педагогика
Промышленность производство
Биология и химия
Языкознание филология
Издательское дело и полиграфия
Рефераты по краеведению и этнографии
Рефераты по религии и мифологии
Рефераты по медицине
Рефераты по сексологии
Рефераты по информатике программированию
Краткое содержание произведений
Статья: Представление в Internet содержимого каталога средствами ASP
Статья: Представление в 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 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 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 href='" & root_vfolder &
Replace(curr_dir2,"","/") & "/" &
arr(i) & _
"'
target='main'>" & arr(i) &
"</a></td></tr>"
Next
End
Select
End
Sub
%>
</BODY>
</HTML>
Далее необходимо написать страницу menu.htm,
содержащую два фрейма, как было показано выше. Листинг приведен ниже:
<HTML>
<HEAD>
</HEAD>
<FRAMESET
COLS="150,*">
<FRAME
NAME="contents" SRC="list_files.asp">
<FRAME
NAME="main" SRC="empty.htm">
</FRAMESET>
</HTML>
Файл empty.htm представляет собой пустой файл-заглушку
для корректного отображения страницы в браузере Netscape Navigator.
<!-empty.htm
<HTML>
</HTML>
Файлы list_files.asp, menu.htm, empty.htm необходимо
поместить в каталог на Web-сервере с правом Script.
Далее в браузере набираем, например,
http://localhost/scripts/menu.htm
Пример работы скрипта приведен на Рис.2.
Рис.2.
Исходный файл проекта прилагается: files.zip