Лабораторная работа №4
Работа с сервером сценариев Windows Scripting Host. Работа с коллекцией FileSystemObject
Объект FileSystemObject
Для файловых операций применяется объект FileSystemObject.
Он не является прямым дочерним объектом WSH, а предназначен для использования совместно с языками сценариев. Вообще сами по себе языки сценариев VBS и JScript не могут работать с файлами и производить какие-либо действия над ними. Работать с файлами могут элементы ActiveX. Но и VBScript и JScript могут создавать объекты ActiveX (т.н. контейнеры объектов) и работать с ними. Для этого и используется FileSystemObject.
Для создания элемента ActiveX служит метод CreateObject. Создадим для работы экземпляр объекта FileSystemObject.
Set FSO = CreateObject(“Scripting.FileSystemObject”)
FileSystemObject (FSO) содержит следующие объекты и коллекции:
Объект/Коллекция | Описание |
FileSystemObject | Основной объект. Содержит методы и свойства, которые позволяют создавать, удалять, получать информацию, и управлять дисками, папками и файлами. Многие методы связанные с этим объектом дублируются в других объектах FSO, которые предусматриваются для удобства. |
Drive | Объект. Содержит методы и свойства, которые позволяют собирать информацию о накопителях, имеющихся в системе, как например, имя диска и сколько свободного места на диске. Имейте в виду, что "диск" не обязательно является жестким диском, но может быть накопителем CD-ROM, виртуальным диском RAM, и так далее. Накопитель не должен обязательно присутствовать на данном компьютере, он может быть доступен и через сеть. |
Drives | Коллекция. Включает в себя все диски на данном компьютере независимо от их типа (HDD, CD-ROM и т.д.). |
File | Объект. Содержит методы и свойства, которые позволяют создавать, удалять, или перемещать файл. Также получают сведения об имени файла, пути к нему, и другие свойства. |
Files | Коллекция. Содержит список всех файлов, находящихся в данной папке. |
Folder | Объект. Содержит методы и свойства, которые позволяют создавать, удалять, или перемещать папки. Также получают сведения об имени папки, пути к ней, и другие свойства. |
Folders | Коллекция. Содержит список всех папок, находящихся в конкретной папке. |
TextStream | Объект. Позволяет читать и делать записи в текстовые файлы. |
Работа с файлами
FileSystemObject (далее FSO) предоставляет некоторые возможности для работы с текстовыми файлами. Можно создавать, удалять, копировать и перемещать файлы.
Для создания текстового файла применяют метод CreateTextFile. Синтаксис:
FSO.CreateTextFile([, overwrite[, unicode]])
где:
filename – имя создаваемого файла.
Необязательные параметры:
owerwrite – логический параметр (true или false), указывает, перезаписывать ли уже существующий файл таким именем.
unicode – логический параметр (true или false), определяющий кодировку создаваемого файла. По умолчанию используется кодировка ASCII. Если принимает значение true – то файл создается в кодировке unicode.
Dim FSO, MyFile
Set FSO = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("c:\testfile.txt", true)
Для проверки существования файлов служит метод FileExists.
VBScript:
Set FSO = CreateObject("Scripting.FileSystemObject")
If (FSO.FileExists("c:\autoexec.bat")) Then
MsgBox "Файл autoexec.bat существует"
Else
MsgBox "Файл autoexec.bat не существует"
End If
Для других операций над файлом, таких как копирование, перемещение и удаление файл должен быть сначала “получен” методом GetFile.
VBScript:
Set FSO = CreateObject("Scripting.FileSystemObject")
Set file1 = FSO.GetFile(“MyFile.txt”)
Для копирования, перемещения и удаления файлов объект FSO предоставляет несколько методов, в зависимости от того какой объект будет использоваться для операций FSO или file. Они показаны в следующей таблице.
Действие | Объект.Метод |
Перемещение | File.Move или FileSystemObject.MoveFile |
Копирование | File.Copy или FileSystemObject.CopyFile |
Удаление | File.Delete или FileSystemObject.DeleteFile |
Копирование файлов.
Set FSO = CreateObject("Scripting.FileSystemObject")
Set file1 = FSO.CreateTextFile("c:\test.txt")
Set file2 = FSO.GetFile("c:\test.txt")
file2.Copy("c:\0\test1.txt")
Перемещение файлов осуществляется аналогично методу копирования.
Удаление файлов:
Set FSO = CreateObject("Scripting.FileSystemObject")
Set file1 = FSO.CreateTextFile("test.txt")
'закрываем файл (см.работа с содержанием файла)
'если не закрыть файл, то он не может быть удален методом Delete
file1.Close
MsgBox "Файл создан"
Set file2 = FSO.GetFile("test.txt")
file2.Delete
MsgBox "Файл удален"
Свойства файла
Синтаксис:
object.Свойство
где
object - File объект
С помощью объекта FSO нам доступны такие свойства файла, как его размер, время создания и т.д.
Свойство | Описание |
Attributes | позволяет просмотреть или установить атрибуты файла. |
DateCreated | содержит дату и время создания файла. Доступно только для чтения |
DateLastAccessed | содержит дату и время последнего обращения. Доступно только для чтения |
DateLastModified | содержит дату и время последнего изменения. Доступно только для чтения |
Drive | cодержит букву диска для устройства, на котором находится файл. Доступно только для чтения |
Name | позволяет просмотреть и изменить имя файла. Доступно для чтения и записи |
PaternFolder | содержит объект Folderдля родительского каталога файла. Доступно только для чтения |
Path | содержит путь к файлу |
ShortName | содержит короткое имя файла (в формате 8.3) |
ShortPath | содержит путь к файлу, состоящий из коротких имен каталогов (в формате 8.3) |
Size | возвращает размер файла в байтах |
Type | возвращает информацию о типе файла |
Set FSO = CreateObject("Scripting.FileSystemObject")
'получаем текущий файл:
Set file1 = FSO.GetFile(WScript.ScriptFullName)
'получаем размер:
fsize = file1.Size
MsgBox "Размер файла " & WScript.ScriptName & ": " & fsize &" килобайт"
Получив набор Files, можно извлечь из него объект «файл» и проанализировать его свойства, как показано в предыдущем примере. Свойство Name объекта File возвращает имя файла, а свойство Attributes — двоичное значение, описывающее атрибуты файла.
Константа | Значение | Описание |
Normal | Обычный файл без установленных атрибутов. | |
Readonly | Файл с атрибутом «только для чтения». | |
Hidden | Скрытый файл. | |
System | Системный файл. | |
Directory | Папка или каталог (возможно, с атрибутом «только для чтения»). | |
Archive | Файл с атрибутом «архивный», модифицированный со времени последнего резервного копирования. | |
Alias | Ярлык (.Lnk-файл). | |
Compressed | Сжатый файл (только для Windows NT/2000). |
Если у файла несколько атрибутов, свойство Attributes представляет собой сумму этих значений. Проверка наличия одного из атрибутов может выполняться следующим образом:
' Файлы с атрибутом “Только для чтения”, имеющиеся в папке:
For each d in f.files
If d.Attributes and 1 Then
m = m & Chr(10) & d.Name
End If
Next
MsgBox m
Работа с содержимым файла
Для работы с содержимым фала используется объект TextStream и его методы.
Работа по изменению содержимого текстового файла состоит из нескольких действий:
1. Открытие файла
2. Работа с содержимым
3. Закрытие файла.
1. Открытие файла может осуществляться несколькими методами FSO - OpenTextFile и OpenAsTextStream.
Оба данных метода работают одинаково, только при применении метода OpenAsTextStream требуется, чтобы текстовый файл уже существовал, в то время как OpenTextFile, если открываемый файл не существует, может создать его.
OpenTextFile
Синтаксис:
FSO.OpenTextFile(filename[, iomode[, create[, format]]])
где
filename – имя открываемого файла
Необязательные параметры:
iomode – режим открытия файла.
Принимает значения:
1 – файл открывается для чтения. Записывать в него нельзя.
2 – файл открывается для записи.
8 – файл открывается для добавления данных
create – логическая величина, определяющая, будет ли создан новый файл, если файла с указанным именем не существует. true – файл создается.
format – кодировка для открытия файла.
Принимает значения:
- 2 – открывается, используя системную кодировку
- 1 – открывается в кодировке Unicode
0 – открывается в кодировке ASCII.
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("c:\testfile.txt", 2, True)
Синтаксис:
File.OpenAsTextStream([iomode, [format]])
где
iomode – режим открытия файла.
Принимает значения:
1 – файл открывается для чтения. Записывать в него нельзя.
2 – файл открывается для записи.
3 – файл открывается для добавления данных
format – кодировка для открытия файла.
Принимает значения:
- 2 – открывается, используя системную кодировку
- 1 – открывается в кодировке Unicode
0 – открывается в кодировке ASCII.
Примечание. Перед использованием метода OpenAsTextStream объект File должен быть создан методом GetFile.
После открытия файла и всех изменений он должен быть закрыт методом Close.
Запись в файл
Запись информации в текстовый файл производится с помощью методом Write, WriteLine и WriteBlankLines.
Методы:
Write - записывает данные в файл в одну строку
WriteLine – записывает данные, с переходом на новую строку.
WriteBlankLines – записывает пустую строку.
Например:
Set FSO = CreateObject("Scripting.FileSystemObject")
Set f = FSO.OpenTextFile("testfile.txt", 2, True)
'Открываем файл, если он не создан, создаем его
f.WriteLine "Файл создан VBScript!"
'записываем строку
f.WriteBlankLines(3)
'записываем 3 пустые строки
f.Write "Это снова я!"
'записываем строку
f.Close
'закрываем файл
Чтение из файла
Для чтения данных из файла используются методы Read, ReadLine, ReadAll, Skip и SkipLine.
Методы:
Read – читает из файла указанное количество символов.
ReadLine – читает строку из файла
ReadAll – считывает весь файл
Skip – пропускает указанное количество символов
SkipLine – пропускает строку
Set FSO = CreateObject("Scripting.FileSystemObject")
Set t_file = FSO.OpenTextFile("testfile.txt", 1)
'открываем файл для чтения
source = t_file.ReadAll
'читаем весь файл и передаем его переменной source
MsgBox source
'выводим содержание файла
t_file.Close
'закрываем файл
Работа с папками
Для работы с папками и их свойствами FSO предоставляет методы Copy, Move, CreateFolder, Delete, DateCreated, DateLastAccessed, DateLastModified, Size, FolderExists, которые работают аналогично файловым методам.
Свойство | Описание |
Attributes - | позволяет просмотреть или установить атрибуты каталога. |
DateCreated | содержит дату и время создания каталога. Доступно только для чтения |
DateLastAccessed | содержит дату и время последнего обращения. Доступно только для чтения |
DateLastModified | содержит дату и время последнего изменения. Доступно только для чтения |
Drive | cодержит букву диска для устройства, на котором находится каталог. Доступно только для чтения |
Files | содержит коллекцию Files, содержащую все файлы в каталоге, включая системные и скрытые. |
IsRootFolder | возвращает True, если каталог является корневым, и False в противном случае. |
Name | позволяет просмотреть и изменить имя каталога. Доступно для чтения и записи |
PaternFolder | содержит объект Folderдля родительского каталога. Доступно только для чтения |
Path | содержит путь к каталогу |
ShortName | содержит короткое имя каталога (в формате 8.3) |
ShortPath | содержит путь к каталогу, состоящий из коротких имен каталогов (в формате 8.3) |
Size | возвращает размер всех файлов и подкаталогов, входящих в данный каталог, в байтах |
Subfolders | содержит коллекцию Folders, состоящую из всех подкаталогов каталога (включая подкаталоги с атрибутами «Скрытый» и «Системный») |
Type | возвращает информацию о типе каталога |
Например
Set FSO = CreateObject("Scripting.FileSystemObject")
If Not FSO.FolderExists("Новая папка") Then
'если папка не существует
'создаем папку "Новая папка":
FSO.CreateFolder("Новая папка")
End If
Set f1 = FSO.GetFolder("Новая папка")
'получаем папку
Info = "Свойства папки: " + f1.Name + Chr(10) + Chr(10)
Info = Info & "Размер: " & f1.Size & Chr(10)
'получаем размер папки
Info = Info & "Создана: " & f1.DateCreated & Chr(10)
'время создания
Info = Info & "Изменена: " & f1.DateLastModified & Chr(10)
'время последнего изменения
MsgBox Info
При необходимости ввода информации о пути к каталогу WSH позволяет использовать не только стандартное окно диалога InputBox, но и стандартное окно Обзор.
Например:
On Error Resume Next
Set objShellApp = CreateObject("Shell.Application")
Set objFolder = objShellApp.BrowseForFolder(0, "Выбор папки", 0, "C:\")
MsgBox objFolder.Self.Path, vbInformation
If Err.Number <> 0 Then
MsgBox "Папка не выбрана!", vbInformation
End If
5 Работа с дисками
С помощью объекта Drive можно получить доступ к свойствам заданного локального или сетевого диска. Создается объект Drive с помощью метода GetDrive объекта FiieSystemObject следующим образом:
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set d = fso.GetDrive("C:")
Также объекты Drive могут быть получены как элементы коллекции Drives.
Свойства объекта Drive представлены в таблице, методов у этого объекта нет.
Свойство | Описание |
AvailableSpace | Содержит количество доступного для пользователя места (в байтах) на диске |
DriveLetter | Содержит букву, ассоциированную с локальным устройством или сетевым ресурсом. Это свойство доступно только для чтения |
DriveType | Содержит числовое значение, определяющее тип устройства: 0 — неизвестное устройство; 1 — устройство со сменным носителем; 2 — жесткий диск; 3 — сетевой диск; 4 -CD-ROM;(CD-R и CD-RW не различаются) 5 — RAM-диск |
FileSystem | Содержит тип файловой системы, использующейся на диске (FAT, NTFS или CDFS) |
FreeSpace | Содержит количество свободного места (в байтах) на локальном диске или сетевом ресурсе. Доступно только для чтейия |
IsReady | Содержит true, если устройство готово, и false — в противном случае. Для устройств со сменными носителями и приводов CD-ROM, IsReady возвращает true только в том случае, когда в дисковод вставлен соответствующий носитель и устройство готово предоставить доступ к этому носителю |
Path | Содержит путь к диску (например, С, но не С: \) |
RootFolder | Содержит объект Folder, соответствующий корневому каталогу на диске. Доступно только для чтения |
SerialNumber | Содержит десятичный серийный номер тома заданного диска |
ShareName | Содержит сетевое имя для диска. Если объект не является сетевым диском, то в свойстве ShareName содержится пустая строка (" ") |
TotalSize | Содержит общий объем в байтах локального диска или сетевого ресурса |
VolumeName | Содержит метку тома для диска. Доступно для чтения и записи |
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set d = fso.GetDrive("C:")
Text = " Информация о диске С:" + Chr(10)
Text = Text & "Объем диска С:" & d.TotalSize & Chr(10)
MsgBox Text, vbOKOnly + vbInformation
Доступная только для чтения коллекция Drives содержит объекты Drive для всех доступных дисков компьютера, в том числе для сетевых дисков и дисководов со сменными носителями.
В свойстве count коллекции Drives хранится число ее элементов, т. е. число доступных дисков.
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
' Получаем коллекцию Drives
Set oDrive = fso.Drives
Text = "Имеются диски " + Chr(10) + Chr(10)
For Each d In oDrive ' Все объекты Drive
Text = Text & d.DriveLetter & " " & d.VolumeName & Chr(10)
Next
MsgBox Text, vbOKOnly + vbInformation
MsgBox "Всего дисков " & oDrive.Count, vbOKOnly + vbInformation
№ варианта | Задание |
1. | Необходимо скопировать на съемный диск, в указанную пользователем папку, папку с файлами, имя которой запрашивается у пользователя. Проверить наличие съемного диска, наличие на нем свободного места. Проверить наличие указанной папки-приемника, если ее нет - создать. Скопировать папку с файлами. Вывести список всех файлов в папке, их размер (в байтах, Кб или Мб) на экран. Продублировать информацию в файл протокола. После записи информации установить для файла протокола атрибут "только чтение". |
Пользователь задает путь к папке. Проверить наличие заданного пути. Создать новую папку, установив для нее заданные пользователем атрибуты и скопировать в нее файлы из корневого каталога диска, заданного пользователем. Записать сведения о скопированных файлах в файл протокола. | |
Выводить вопрос, какую папку создать и на каком диске. Проверять, есть ли такой диск, папка должна быть корневой. В папке создать файл Inform.txt и записать в него информацию о заданном пользователем диске: тип файловой системы и количество доступного для пользователя места. Если такой файл уже имеется, дописывать в него информацию и присваивать ему атрибут «Скрытый». | |
Проверять, были ли обращения к заданной папке со времени, введенного пользователем. Вывести список и общий размер файлов с атрибутом "Только для чтения", имеющихся в папке. Заархивировать эти файлы. Создать файл и записать в него информацию о заданном пользователем диске: метку диска, серийный номер и общий размер (Кб, Мб или Гб). | |
Пользователь задает путь к папке (возможно сетевой). Проверить существует ли указанный диск и папка. Если со дня создания папки к ней не было обращений больше месяца, предложить удалить ее целиком или файлы, находящиеся в ней (по одному), выводя размер и дату создания каждого файла. Если в папке есть файлы с расширением.txt, выводить их первые 3 строки. | |
Определить, изменялась ли папка за последнюю неделю. Если нет, скопировать в нее файлы с дискеты, CD или съемного диска. Проверить наличие дискеты (CD), вывести список имеющихся на ней файлов и удостовериться, что на рабочем диске достаточно места. Создать файл, записав туда тип диска, с которого выполнялось копирование и его метку. Файлу присвоить атрибут «Скрытый». | |
Пользователь задает путь к папке (возможно сетевой). Проверить ее наличие. Вывести количество и объем файлов, входящих в папку, кроме системных и скрытых. Продублировать эту информацию в файл на выбранном пользователем сетевом диске (если он доступен) в файл “Info.txt”. | |
Вывести каталоги съемного диска, полные пути и короткие пути которых одинаковы. Проверять наличие диска, наличия на нем папок и файлов. Создать файл «протокол. txt» и записать в него информацию о диске С: - общий размер, занятое пространство, свободное пространство, тип файловой системы. Установить на этот файл атрибут «Только чтение». | |
Определить размер файлов, входящих в указанную пользователем папку. Если в ней есть вложенные папки, их размер не учитывать. Размер выводить в соответствующих единицах (байтах, Кб или Мб). Эту информацию вывести на экран и продублировать в файл, который записать в корневой каталог заданного пользователем диска. | |
Написать сценарий, который будет осуществлять поиск файла, заданного пользователем, в каталогах на заданном пользователем диске. Проверить наличие указанного диска. Вести протокол поиска, записывая, в каких каталогах обнаружен файл. Файл протокола сделать скрытым. Если искомый файл обнаружен хотя бы раз, вывести сообщение на экран. | |
Написать сценарий, который будет осуществлять копирование файлов из заданного пользователем каталога на съемном диске в указанную пользователем папку. Проверить наличие диска, файлов на нем и наличие указанной папки. Если в указанной папке уже есть такие файлы, копировать только более новые файлы. Создать файл протокола, записав дату копирования и информацию о том, сколько файлов было скопировано и их общий объем. | |
Написать сценарий, который будет создавать отчет об использовании дискового пространства на всех доступных дисках. В файл отчета записывать дату проверки, букву диска, метку тома, общий объем, количество свободного и занятого пространства в Мб. Вывести сообщение, если в корневом каталоге диска обнаружены каталоги, размер которых превышает заданную величину, например 500 Мб. |