В ASP FSO означает объект файловой системы, который является объектом файловой системы.
Компьютерная файловая система, которую мы собираемся манипулировать, относится к тому, чтобы быть расположенным на веб -сервере. Итак, убедитесь, что у вас есть правильные разрешения для этого. В идеале вы можете настроить веб -сервер на своей собственной машине, чтобы вы могли легко выполнить тестирование. Если вы работаете в Windows, попробуйте бесплатный персональный веб -сервер Microsoft.
FSO модели объекты
Drive Object: Drive Objects для доступа к дискам или сетевым дискам
Объект файловой системы: объекты файловой системы для доступа к файловой системе компьютера
Объект папки: объект папки для доступа к всем свойствам папки
Объект TextStream: объект текста для доступа к содержимому файла
Вы можете использовать вышеуказанный объект, чтобы сделать что-либо на вашем компьютере, включая действия саботажа ;-( Так, будьте осторожны с FSO. В веб-среде очень важно хранить информацию, такую как пользовательская информация, файлы журнала и т. Д. Предоставляет мощный и простой способ эффективного сохранения данных.
FSO работает на Microsoft, а ASP, вероятно, больше не доступна для систем, не являющихся Windows.
Как использовать FSO?
Чтобы использовать FSO для выполнения всей работы, сначала создайте объект, код такой:
| < %Установить fso = server.createObject (scripting.filesystemobject) % > |
Это создает FSO и назначает переменную FSO. Здесь мы можем использовать FSO.Method или FSO.Property, который будет замечен в следующем примере.
Модель FSO расположена в файле DLL -файла Script Shink Srunither, предоставленного Microsoft, который является scrrun.dll. Вы можете ссылаться на этот файл DLL в любом приложении, например, MS Access, Word. То есть это не просто ограничено применением его в ASP.
Вот краткий список методов FSO:
| Метод FSO | |
| Копия | Скопируйте один или несколько файлов на новый путь |
| CreateTexTfile | Создайте файл и верните объект Textstream |
| Deletefile | Удалить файл |
| OpenTextFile | Откройте файл и верните объект TextStream для чтения или добавления |
Если вы хотите узнать полные методы и свойства FSO, пожалуйста, обратитесь к Microsoft MSDN. Давайте посмотрим несколько примеров ниже.
Предположим, вы хотите создать простую гостевую книгу, где вы можете создать базу данных, в которой вы храните информацию пользователя. Однако использование FSO для хранения информации сэкономит вам время и деньги, если мощность базы данных не требуется. И некоторые интернет -провайдеры могут ограничивать приложения баз данных в Интернете.
Предположим, вы собрали некоторую информацию пользователя в форме, вот простая форма HTML -код:
| < HTML > < Тело > < Form action = formhandler.asp method = post > < Type Type = Text Size = 10 name = имя пользователя > < Тип ввода = размер текста = 10 name = домашняя страница > < Тип ввода = размер текста = 10 имен = электронная почта > < /форма > < /тело > < /html > |
Давайте посмотрим на код, который обрабатывает формы в FormHandler.asp:
| < % 'Получите информацию о форме strname = request.form (имя пользователя) strhomepage = request.form (домашняя страница) strmail = request.form (электронная почта) 'Создать объект FSO Установить fso = server.createObject (scripting.filesystemobject) |
До сих пор ничего нового не является чем -то более, чем получение значения поля формы и назначение значений переменным. Ниже появляется интересная часть - напишите файл:
| PATH = C: EMP EST.TXT Forreding = 1, Forwriting = 2, ForAppending = 3 'Откройте файл Установить файл = fso.opentextfile (path, forappending, true) 'Запишите информацию в файл file.write (strname) и vbcrlf file.write (strhomepage) и vbcrlf file.write (stremail) и vbcrlf 'закрыть и убирать file.close Установить файл = ничего Установить FSO = ничего |
Напомним, что метод OpenTextFile возвращает объект Textstream, который является еще одним объектом в модели FSO. Объект TextStream раскрывает способы манипулирования контентом файла, такими как написание, чтение и пропуск строки. Постоянная VB VBCRLF производит новую линию.
TRUE определяется в параметре команды OpenTextFile, который сообщает системе, что если файл не существует, создайте его. Если файл не существует, и истинный параметр не определяется, возникает ошибка.
Теперь перейдите в каталог C: EMP, Open Test.txt, и вы можете увидеть следующую информацию:
| Имя пользователя Домашняя страница пользователя Электронная почта пользователя |
Конечно, эти слова можно заменить на все, что введено в форму.
Теперь некоторая информация пользователя сохраняется в файле, например, в простой базе данных. Предположим, есть пользователь, который хочет знать всех посетителей и должен отделить соответствующие детали от зарегистрированной информации, потому что нет структурированного столбца, как база данных.
Мы знаем, что в созданном файле строка 1 - имя пользователя, строка 2 - их домашняя страница, а строка 3 - их адрес электронной почты. Зарегистрированные пользователи также будут хранить свою информацию в этой структуре, поэтому каждые 3 строки будут содержать информацию о регистрации одного пользователя. Зная это, вы можете написать следующий код для отображения информации:
| < % 'Создать объект FSO Установить fso = server.createObject (scripting.filesystemobject) PATH = C: EMP EST.TXT 'Откройте файл Установить файл = fso.opentextfile (path, 1) < - для Чтение |
Далее проанализируйте каждую строку и отформатируйте данные:
| Делайте до file.atendofstream Response.write (name: & file.readline &) Response.write (домашняя страница: & file.readline &) Response.write (электронная почта: & file.readline & < P >) петля 'закрыть и убирать file.close Установить файл = ничего Установить FSO = ничего %> |
Это просто очень простой выход, но вы можете включить информацию о таблице или форме DHTML в соответствии с ситуацией.
Если файл был правильно создан и записан, в небольшом цикле выше будет указана информация всех в базе данных. Метод считывания считывает 1 строку контента до тех пор, пока не появится новая линия, а последующий вызов считывания будет прочитать следующую строку. Atendofstream - это свойство объекта Textstream, который сообщает нам, когда мы сталкиваемся с хвостом файла.
Предположим, что по какой -то причине мы не формируем файл правильно, если у пользователя есть только 2 строки информации вместо 3 строк, то возникнут некоторые ошибки. Наш цикл здесь получает следующие 3 строки информации в файле.
| Ошибка объекта сервера 'ASP 0177: 800A003E' |
Поэтому обязательно добавьте какой -то код обработки ошибок, чтобы предотвратить вставку ненужных строк в файл или отсутствующая информация о необходимой строке.
Основные знания обсуждаются выше, а затем обсуждается проблема разрешений и разрешений. FSO работает с учетной записью пользователя, которая создает ее, другими словами, если кто -то обращается к вашей странице из Интернета, то эта интернет -учетная запись создает FSO. Если вы войдете в компьютер в качестве администратора и войдите на страницу, учетная запись администратора создает FSO. Это очень важно, потому что определенная учетная запись имеет определенные разрешения, и FSO требует некоторых разрешений для полного выполнения функций.
Интернет -учетные записи (iuser_machineName, MachineName - это имя сервера), как правило, имеют только разрешения для чтения, что означает, что пользователь не сможет записать в файл гостевых книг. Тем не менее, есть несколько вариантов обойти эту проблему.
Прежде всего, это также очень сложно, требуя, чтобы пользователи могли войти на сервер, прежде чем заполнить гостевую книгу. Тем не менее, ключевой момент гостевой книги - собирать информацию от анонимных пользователей, и если пользователя просят войти в систему, вы должны знать, кто они. Итак, пропустите эту опцию и посмотрите на следующий.
Второй метод состоит в том, чтобы создать каталог или файл, а пользователь iuser_machineName имеет разрешения на запись. Это может открыть некоторые потенциальные уязвимости безопасности, потому что любой, кто знает правильный каталог и обладает некоторыми веб -навыками, может заполнить контент на сервере. Это серьезная табу. Таким образом, вы должны подтвердить, что информация об этих документах с записи сохраняется в скрытом месте и устанавливает эти каталоги за пределами структуры веб -каталога, насколько это возможно (например, под Windows, это каталог, который не находится в каталоге inetPub).
Вы можете подумать: хорошо, теперь я знаю, как написать в файл. Но можем ли мы сделать больше? Давайте попробуем создать функцию поиска для веб -сайта.
Ключом к созданию поисковой системы является рекурсия. В основном, напишите кусок кода для поиска файлов в каталоге, а затем выполните один и тот же код во всех циклах каталогов. Поскольку невозможно определить, сколько подкаталогов в общей сложности, код поиска должен выполняться снова и снова, пока он не будет закончен. Рекурсивные звонки очень хороши!
Давайте создадим страницу поиска. Предположим, что была создана форма HTML, где пользователь входит в строку поиска.
| Dim objfolder Dim StrsearchText Dim objfso strsearchtext = request.form (searchtext) < - строка поиска 'Создать объекты FSO и папки Установить fso = server.createObject (scripting.filesystemobject) Установить objfolder = objfso.getfolder (server.mappath (/)) Поиск ObjFolder |
Приведенный выше код просто инициализирует переменные, и функция поиска выполняет функцию поиска, которая описана следующим образом:
| Поиск функций (objFolder) Dim objsubfolder 'Проверка каждого файла в текущем папка Для каждого objfile в objfolder.files Установить objtextStream = objfso.opentextfile (objfile.path, 1) < - для чтения 'Прочтите содержимое файла в переменная strfilecontents = objtextStream.readall 'Если строка поиска находится в файле, то Напишите ссылку 'В файл Если instr (1, strfilecontents, strsearchtext, 1) тогда Response.write < href =/ & objfile.name & _ > & objfile.name & < /a >< Br > BolfileFound = true Конец, если objtextStream.close Следующий 'Вот рекурсионная часть - для каждого 'Подпастья в этом каталоге снова запустите функцию поиска Для каждой objsubfolder в objfolder.subfolders Поиск objsubfolder Следующий Конечная функция |
Чтобы иметь возможность открыть файл, FSO требует фактического пути файла, а не веб -пути. Например, это c: inetpubwwwroot empiindex.html, не www.enfuss.com/temp/index.html или /temp/index.html. Чтобы преобразовать последнее в первое, используйте Server.mappath (имя файла), имя файла, чтобы представить имя веб -пути.
Приведенный выше код будет выполнен в каждом подкаталоге папки в соответствии с указанным вами начальным каталогом, где первоначальный каталог относится к веб -корневым каталогу/. Затем просто откройте каждый файл в каталоге, чтобы увидеть, содержит ли он указанную строку.
Обратите внимание, что по мере увеличения количества файлов и подкаталогов, время, необходимое для поиска, увеличится. Если вам нужна тяжелая поисковая работа, вам рекомендуется принимать другие методы, такие как сервер индексного сервера Microsoft.
На этом этапе у вас может быть хорошее понимание FSO. Давайте более глубоко взглянем на это, чтобы решить более сложные проблемы.
Во -первых, вы можете переименовать файл. Чтобы отслеживать все документы, вы захотите переименовать их, чтобы они были уникальными, чтобы их можно было легко различить. К сожалению, FSO не разрешает простые операции изменения имени файла, поэтому мы должны изменить его.
| < % 'Создать объект FSO Установить fso = server.createObject (scripting.filesystemobject) PATH = C: EMP EST.TXT strdate = reply (date (), /,) strdir = c: inetpubwwwrootarticlicles & strdate strnewfilename = час (сейчас) и _ & minute (сейчас) и _ & & Второй (сейчас) и .html 'Откройте старый файл Установить файл = fso.opentextfile (path, 1) < - для чтения strtext = file.readall Установить файл = ничего 'Проверьте и/или создайте папку Если не fso.folderexists (server.mappath (strdir)), тогда Установите f = fso.createfolder (server.mappath (strdir)) еще Установить f = fso.getFolder (server.mappath (strdir)) конец, если 'Создать и написать новый файл set file = fso.createTextFile (f.path & & strnewfilename) file.write (strtext) Установить f = ничего file.close Установить файл = ничего 'Удалить старый файл fso.deletefile (path & & rst (имя файла) и i) 'Очистите Установить FSO = ничего %> |
Отсутствие возможностей FSO стало здесь преимуществом, и мы можем выполнять 2 шага за раз. Во -первых, откройте файл и прочитайте содержимое файла. Предположим, здесь вы хотите создать уникальную папку и уникальный файл для хранения статьи. Однако, поскольку путь к папке будет изменяться каждый день, необходимо сначала проверять, существует ли папка и если она не существует, создайте ее. Это делается в фрагменте, если не FSO.FolderExists. Затем возьмите этот путь и создайте новый файл. После создания нового файла удалите старый файл, который выполняется через fso.deletefile.
Эти 2 шага: переименовать файл, а затем переместить его в более подходящий каталог. Обратите внимание, что вы также можете выполнять больше операций в файлах, таких как редактирование контента, прежде чем записать в новый файл.
У FSO есть некоторые слабости - например, трудно обрабатывать двоичные файлы, которые включают документы Word, файлы во многих графических форматах и некоторые другие файлы. Тем не менее, вы все еще можете манипулировать этими файлами другими способами - переместить, удалить их и т. Д. Все, что вы не можете сделать, это открыть или написать их.
Другим ограничением является проблема длины файла. Когда какой -то контент читается и записывается немедленно, вся информация хранится в памяти - чем больше контента, тем больше памяти он потребляет. Это замедлит каждую работу. Поэтому, если вам нужно работать с очень большими файлами или большим количеством небольших файлов, рассмотрите возможность разделителя файлов на небольшие кусочки и часто очищать память. Включение приложений в компоненты объектов COM также может значительно улучшить скорость программы.
Точно так же вы не можете использовать FSO для управления разрешениями и свойствами файлов и папок. Этот метод часто используется в CGI и Perl, но, к сожалению, нет удовлетворительного способа реализации его с помощью FSO.
Что еще я могу сделать с FSO?
В FSO есть много замечательных функций, но многие люди этого не понимают. Эти функции часто обнаруживаются после того, как вы чувствуете, что в настоящее время трудно что -то сделать.
Вот некоторые из этих несгоновок, но очень крутые функции:
Особенности FSO, которые редко понимаются
Метод GetSepecialForder возвращает путь к конкретной папке Windows: Windows Installation Directory; Требуется метод getabsolutepathname Возвращает абсолютный путь к папке (аналогично Server.mappath) при хранении временных данных.
Например, fso.getabsolutepathname (область) вернет результат, аналогичный следующему: C: Mydocsmyfolder Oxide
Метод getExtensionName Возвращает расширение последней части пути (например: fso.getextensionname (c: docs est.txt) вернет txt) getBasEname и методы GetParentFolder Возвращает родительскую папку последней части пути
(Например: FSO.GetParentFolder (C: DocsmyDocs) вернет свойство «Документы»).
При использовании вышеуказанных функций лучше всего создать код для обработки ошибок. Потому что, если требуемые параметры не существуют, будет создана неприятная информация.
Суммировать
Как мы уже видели, FSO очень полезно, и то, что мы представляем здесь, является лишь верхушкой айсберга. Вы можете использовать FSO для создания мощных приложений и просто выполнить множество задач.