Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы СиППО (2012).doc
Скачиваний:
2
Добавлен:
12.11.2019
Размер:
953.34 Кб
Скачать

Методические указания к лабораторной работе № 9

"Разработка программ работы с файловой системой с использованием VBScript или JScript"

по дисциплине

Системное и прикладное программное обеспечение

Направление подготовки: 010400 «Прикладная математика и информатика»

Профиль подготовки: 010400 «Прикладная математика и информатика»

Квалификация выпускника: бакалавр прикладной математики и информатики

Форма обучения: очная

Тула 2011 г.

М

1 2 Сентября 11

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

протокол №___ от "___"____________ 20___ г.

Зав. кафедрой ________________ В.И. Иванов

Методические указания к лабораторной работе пересмотрены и утверждены на заседании кафедры прикладной математики и информатики механико-математического факультета

протокол №___ от "___"____________ 20___ г.

Зав. кафедрой ________________ В.И. Иванов

1. Цель и задачи работы

Освоить средства и приемы разработки программ работы с файловой системой с использованием VBScript или Jscript.

2. Общие положения (теоретические сведения)

Windows Script Host

Windows Script Host - WSH первоначально назывался Windows Scripting Host, был переименован ко второму выпуску) - компонент Microsoft Windows, предназначенный для запуска сценариев на скриптовых языках JScript и VBScript, а также и на других дополнительно устанавливаемых языках (например, Perl).

Возможности сценариев на WSH значительно превосходят возможности командных .bat и .cmd-файлов: имеются полноценные языки с объектными возможностями, полный набор операций со строками, включая регулярные выражения, взаимодействие с любыми программами, реализующими объектный скриптовый интерфейс (Active Scripting или OLE Automation), доступ к методам и свойствам их объектов; операции с файлами и каталогами, обработка текстовых файлов, манипуляции с системным реестром и т. п.

Сценарии из .js, .vbs, .wsf и некоторых других типов файлов запускаются с помощью одной из двух программ-активаторов: wscript.exe (с графическим интерфейсом) или cscript.exe (с консольным интерфейсом).

Самые первые версии WSH поставлялись в виде отдельного компонента, опционально устанавливаемого в Windows, но уже начиная с Windows 98 WSH стал частью всех ОС Windows

JScript, VBScript

Языки программирования JScript, VBScript содержат самые разнообразные свойства, методы, объекты, функции и т. д. Кроме того, в JScript/VBScript можно использовать множество соответствующих возможностей из библиотеки классов .NET Framework. В следующих разделах описывается правильное использование этих возможностей и допустимый синтаксис JScript/VBScript.

В этом разделе демонстрируются средства работы с объектами файловой системы, а именно, с самими файлами и локальными дисками (дисководы, жесткие диски, CD-ROM'ы). Сетевые диски будут рассмотрены в одной из следующих статей.

Приведу небольшой пример и на его основе объясню принципы работы с дисками в Windows Script Host. Если вы еще не отключили сообщение системы о том что какой-то диск переполнен, то, наверняка, уже не раз лицезрели его. Мерзкая штука! Оно вам надо? Давайте, лучше, сами создадим такое сообщение :).

'Проверка количества свободного места на дисках. VBScriptSet fso = WScript.CreateObject("Scripting.FileSystemObject")Set WSHShell = WScript.CreateObject("WScript.Shell")

'Проверяем все драйвы (HDD, FDD, CDD) в системе

For each i In fso.Drives 'DriveType=2 - логические диски.

If i.DriveType=2 Then 'Получаем букву диска

drive=i.DriveLetter 'Узнаем свободное место и переводим его в Мб с точностью до 1 знака после запятой

free = FormatNumber(fso.GetDrive(drive).FreeSpace/1048576,1) 'Если места меньше 100 Мб

If free < 100 Then 'то выводим сообщение об этом

WSHShell.Popup("На диске "+drive+" осталось меньше 100 Мб. Свободно "+free+" Мб!")

End If

End If

Next

Добавьте получившийся файл в автозагрузку и каждый раз при старте системы у вас будет проверяться наличие свободного места на диске. Как только его окажется меньше порогового значения, заданного вами (в примере 100 Мб), выскочит информационное окно, уведомляющее об этом.

Если вы не будете фильтровать тип диска (строка If i.DriveType=2), то объем свободного места будет проверяться и на дискете в дисководе и на CD-ROM'e. А если в приводе не будет носителя, то скрипт прервется и будет выдано сообщение об ошибке.

DriveType имеет следующие значения:

0 - Тип не может быть определен

1 - Сменный носитель или дисковод для гибких дисков

2 - Обычный HDD

3 - Сетевой диск

4 - CD-ROM

5 - Виртуальный RAM-диск

Остановимся подробнее на строке free = FormatNumber (fso.GetDrive(drive).FreeSpace /1048576, 1). Свойство FreeSpace возвращает количество свободного дискового места в байтах. Конечно, работать с такими большими цифрами некомфортно, поэтому мы переводим байты в мегабайты, делением на 1048576. А чтобы не лицезреть кучу знаков после запятой, округляем до одного значащего символа с помощью FormatNumber() - количество знаков после запятой устанавливается с помощью второй переменной.

Если вам надо получить полный объем диска, то вместо FreeSpace используйте свойство TotalSize.

Вы можете явно указать диск, с которым хотите работать. Для этого используется метод GetDrive:

Set fso = WScript.CreateObject("Scripting.FileSystemObject")Set Drive = fso.GetDrive("c")

Чтобы узнать файловую систему диска используйте свойство FileSystem:

MsgBox(Drive.FileSystem)

Остальные свойства и методы работы с диском не так интересны. Среди них такие как:

  • DriveExists - проверяет на наличие заданного диска: fso.DriveExists("c").

  • IsReady - если диск готов к использованию, возвращает true, в противном случае - false.

  • RootFolder - возвращает путь к корневому каталогу.

  • SerialNumber - возвращает серийный номер диска.

  • ShareName - возвращает сетевое имя диска.

  • VolumeName - возвращает либо устанавливает метку диска.

Теперь обратим внимание на работу с файлами и папками. Редактирование файлов я бы хотел вынести в отдельную статью, а здесь коснемся вопросов создания, копирования, удаления файлов, установки атрибутов и т.п.

Для примера давайте создадим на диске С:\ папку TEST, а в ней файл test.txt:

//Создание папки и файла. JScriptvar fso = new ActiveXObject("Scripting.FileSystemObject");//Проверяем, есть ли такая папкаif (fso.FolderExists("C:\\TEST")) WScript.Echo("Такая папка уже существует");else//Если нет - создаем var Folder = fso.CreateFolder("C:\\TEST");//Проверяем, есть ли уже такой файлif (fso.FileExists("C:\\TEST\\test.txt")) WScript.Echo("Такой файл уже существует");else//Если нет, то создаем его var File = fso.CreateTextFile("C:\\TEST\\test.txt", true);

Комментарии наглядно демонстрируют работу скрипта. Давайте только подробнее остановимся на создании файла (последняя строка). Вторым параметром передается значение true. Этот параметр является необязательным и указывает, перезаписывать ли файл с таким именем. Здесь же может передаваться и третий параметр. Если он отсутствует или равен false, то файл будет создан в кодировке ASCII. Если параметр равен true - в unicode.

В примере мы не просто создали папку и файл, но и создали объекты этой папки и файла (Folder и File соответственно). Если надо создать объект для уже существующей папки/файла, используйте метод GetFile/GetFolder:

var File1 = fso.GetFile("C:\\autoexec.bat");

К этим объектам применимы различные методы, позволяющие копировать, переименовывать, удалять файлы, получать о них различные сведения, устанавливать атрибуты. Как несложно догадаться для копирования, перемещения и удаления файлов и папок применяются методы Copy, Move и Delete. При этом в Copy и Move передается имя файла, в который надо скопировать/перенести исходный, а в Delete ничего не передается. Так, чтобы скопировать autoexec.bat в autoexec.tmp надо добавить строку

File1.Copy("C:\\autoexec.tmp");

Различные свойства объектов, созданных с помощью GetFile/GetFolder позволяют получить различные сведения о файлах и папках на которые они указывают. Вот эти свойства:

  • Size - возвращает размер файла/папки;

  • DateCreated - время создания;

  • DateLastAccessed - время последнего обращения к объекту;

  • DateLastModified - время последнего изменения.

Например:

WScript.Echo(File1.Size);

Бывают ситуации, когда надо получить имя файла, на который ссылается объект. Например:

var fso = new ActiveXObject("Scripting.FileSystemObject");var File1 = fso.GetFile("C:\\autoexec.bat");var File2 = fso.GetFile("C:\\config.sys");var File3 = fso.GetFile("C:\\netlog.txt");if (fso.FileExists("C:\\config.sys")) File1 = File2;else File1 = File3;WScript.Echo (File1.Name);

В зависимости от того, есть ли файл config.sys, объект File1 будет указывать на разные файлы. Конечно, в таком виде этот пример в реальной ситуации вряд ли встретится, но для иллюстрации неопределенности с файлом вполне подходит. Для определения имени файла (папки) и пути к нему служат еще несколько свойств:

  • Name - возвращает обычное имя файла (папки);

  • ShortName - короткое имя (в формате MS-DOS). Длинные имена будут урезаны до формата 8.3;

  • Path - возвращает обычный путь к файлу (папке);

  • ShortPath - короткий путь (с тильдой "~");

  • ParentFolder - возвращает имя родительского каталога.

Как они работают вы уже могли видеть в предыдущем примере в последней строке.

Закончить рассмотрение данной темы мне бы хотелось описанием установки атрибутов файлов/папок и получением сведений о типе файла. Тип файла возвращает свойство Type. Вызывается оно аналогично описанным ранее свойствам:

WScript.Echo (File1.Type);

Если вы вызовите свойства файла по правому клику мышки, то на вкладке "Общие" в поле "Тип" будет как раз то описание, что возвращает это свойство.

Получать или устанавливать атрибуты файлам и папкам позволяет свойство Attributes. Так, посмотреть атрибуты нашего файла можно командой:

WScript.Echo (File1.Attributes);

В таблице приведены значения, которые может принимать данное свойство:

Константа Значение Действие Описание

  • Normal 0 чтение/запись Обычный файл без атрибутов

  • ReadOnly 1 чтение/запись Только чтение

  • Hidden 2 чтение/запись Скрытый

  • System 4 чтение/запись Системный

  • Volume 8 только чтение Метка диска

  • Directory 16 только чтение Папка

  • Archive 32 чтение/запись Архивный

  • Compressed 128 только чтение Сжатый файл

Если вам надо установить несколько свойств файлу, значения надо складывать. Например чтобы установить для файла атрибуты только для чтения, скрытый и системный, надо передать значение 1+2+4=7:

File1.Attributes = 7;

Чтение и редактирование файлов

Копировать, переносить и удалять файлы и папки мы научились в предыдущей статье, теперь давайте попробуем просматривать содержимое файлов и редактировать их. Областей применения данного умения масса: от редактирования autoexec.bat и config.sys, до проверки значения параметра run в win.ini, от вывода на экран содержимого файла в качестве сообщения до ведения логов работы пользователей и действий скрипта.

Так как файлы у нас относятся к объектам файловой системы, то нам надо в первую очередь инициализировать объект файловой системы, а затем воспользоваться одним из его методов для открытия файла:

//JScriptvar fso = new ActiveXObject("Scripting.FileSystemObject");var file = fso.OpenTextFile("C:\\TEST\\test.txt", 2, true);//VBScriptSet fso = CreateObject("Scripting.FileSystemObject") Set file = fso.OpenTextFile("C:\TEST\test.txt", 2, true)

Итак, OpenTextFile открывает файл, если его нет, то создается новый файл. Из параметров, передаваемых методу, обязательным является только первый - имя файла. Остальные параметры можно не указывать. Вторым параметром устанавливается режим открытия файла. Возможные значения, которые может принять эта переменная, следующие:

1 - файл открывается только для чтения;

2 - файл открывается для записи. Причем, все содержимое файла, которое было до этого, уничтожится;

8 - файл открывается для добавления данных. Все, что вы запишите, будет добавлено в конец файла. Довольно удобно для ведения различных логов.

Третья переменная может принимать значение true или false. Она показывает, создавать ли новый файл, если его до этого не существовало. Если значение равно true, то новый файл будет создан.

Есть еще и четвертый параметр, который указывает кодировку для открытия файла. Его возможные значения:

- 2 - открывается, используя системную кодировку;

- 1 - открывается в кодировке Unicode;

0 - открывается в кодировке ASCII.

Но, просто открыть файл мало, надо туда и записать что-нибудь! Именно для этого служат следующие методы:

  • Write - записывает данные в файл в одну строку, без перевода курсора;

  • WriteLine - записывает в файл отдельную строку;

  • WriteBlankLines - записывает пустую строку (в качестве параметра принимает количество пустых строк, которые надо записать).

Вот небольшой пример их использования:

//JScriptfso = new ActiveXObject("Scripting.FileSystemObject");file = fso.OpenTextFile("c:\\TEST\\test.txt", 2, true);file.Write("Hello, World!");file.WriteBlankLines(2);file.WriteLine("Hello");

Для чтения данных из файла используются методы:

Read - читает из файла указанное в качестве параметра количество символов;

ReadLine - читает строку из файла;

ReadAll - считывает весь файл;

Skip - пропускает указанное количество символов;

SkipLine - пропускает строку.

Давайте попробуем написать на основе этого один весьма полезный скрипт:

//JScriptfso = new ActiveXObject("Scripting.FileSystemObject");//Откроем файл на чтение//При необходимости поменяйте путь расположения файлаfile = fso.OpenTextFile("c:\\windows\\win.ini", 1, false);//Предполагаем, что параметр run находится во 2-й строке//поэтому устанавливаем туда курсор, пропустив первую строкуfile.SkipLine();//Считываем строку и сравниваем с пустой записью//Если они не совпадают, то бъем тревогуif (file.ReadLine()!="run=") { WScript.Echo("Параметр run не пустой!!!");}//Это просто для контроля. В реальной работе можно отключитьelse { WScript.Echo("OK!");}

Некоторые вирусы и трояны прописывают свой запуск в файле win.ini в параметре run. Этот скрипт проверяет, есть ли там какая-то запись, и если с помощью него что-то запускается, то скрипт об этом честно предупреждает. Конечно, это самый примитивный вариант, можно сделать, чтобы была проверка, действительно ли это параметр run, выводить его содержимое если он не пустой, но в учебных целях такого вполне достаточно. Прописываете его в автозагрузку и можете спать спокойно (только не сильно увлекайтесь "засорением" автозагрузки - хоть и не на много, но загружаться будет медленнее).

При работе с файлами учтите такой момент: если вы открываете файл для записи, то читать из него данные вам не позволят, аналогично и наоборот.

3. Объекты исследования, оборудование, материалы и наглядные пособия

Объект исследования – средства и приемы разработки программ работы с файловой системой с использованием VBScript или Jscript.

В качестве оборудования используются персональные компьютеры учебных классов кафедры ПМиИ (ауд. 12-207, 12-209, 12-211).

В качестве операционной системы используется операционная система MS Windows XP SP2, Mandrake Linux 10.

Среда разработки/выполнения: консольный и графические интерфейсы операционной системы, команды командного интерпретатора (cmd.exe, bash), файловый менеджер (FAR.exe, Midnight Commander), текстовый редактор (FAR.exe, Midnight Commander).

Средства ввода: клавиатура или текстовый файл.

Средства ввода: экран ПК или текстовый файл.

4. Задание на работу (рабочее задание)

Разработать программу работы с файловой системой с использованием VBScript или Jscript.

Спецификация программы: по заданному имени каталога нужно построить структуру содержимого этого каталога, в котором

  • для каждого каталога и файла надо указать его имя;

  • для каждого каталога указать отдельно число подкаталогов и файлов, входящих в него непосредственно;

  • для каждого файла надо указать его размер в байтах;

  • сведения о каталогах и файлах представить в структурированной форме, показывающей характер подчиненности объектов.

5. Ход работы (порядок выполнения работы)

В среде операционной системы Windows XP / Mandrake Linux с использованием консольного (графического) интерфейса операционной системы разработать и проверить программу работы с файловой системой с использованием VBScript или Jscript.

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

Сохранить результаты работы (протоколы решения основных и контрольных задач) в текстовом файле или в документе Word.

Составить отчет о выполнении работы.

6. Содержание отчета

Отчет должен содержать:

  1. Титульный лист;

  2. Формулировку цели и задач работы;

  3. Индивидуальное задание на работу

  4. Описание использованных программных и аппаратных средств для выполнения работы;

  5. Описание хода работы с указанием этапов и пояснениями используемых решений (методов, программ, процедур, библиотек);

  6. Список использованных источников.

7. Список библиографических источников

  1. Таненбаум, Э. Современные Системное и прикладное программное обеспечение / Э. Таненбаум.– М., СПб.: Питер, 2006.– 1038 с.

  2. Гордеев, А.В. Системное и прикладное программное обеспечение / А.В. Гордеев.– М., СПб.: Питер, 2005.– 416 с.

  3. Пфаффенбергер, Б. Linux: спец. справочник / Б. Пфаффенбергер.– СПб.: Питер, 2001.– 576 с.

  4. Чекмарев, А.Н. Microsoft Windows Server 2003: наиболее полное руководство / А.Н. Чекмарев, А.В. Вишневский, О.И. Кокорева.– СПб.: БХВ-Петербург, 2007.– 1120 с.