Опубликован: 12.01.2008 | Уровень: специалист | Доступ: свободно
Лекция 6:

Сценарии WSH для доступа к файловой системе. Объектная модель FileSystemObject

< Лекция 5 || Лекция 6: 12 || Лекция 7 >
Получение списка всех файлов заданного каталога

В свойстве Files объекта Folder, соответствующего определенному каталогу, хранится коллекция находящихся в этом каталоге файлов (объектов File ). В листинге 6.7 приведен сценарии ListFiles.vbs, выводящий на экран названия всех файлов, которые содержатся в специальной папке Мои документы.

'*******************************************************************
' Имя: ListFiles.vbs                                               
' Язык: VBScript                                                   
' Описание: Получение списка всех файлов заданного каталога       
'*******************************************************************
'Объявляем переменные
Dim FSO,F,File,Files,WshShell,PathList,s

'Создаем объект FileSystemObject
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
'Создаем объект WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
'Создаем объект WshSpecialFolders
Set WshFldrs = WshShell.SpecialFolders
'Определяем путь к папке Мои документы
PathList = WshFldrs.item("MyDocuments") & "\"
'Создаем объект Folder для папки Мои документы
Set F = FSO.GetFolder(PathList)
'Создаем коллекцию файлов каталога Мои документы
Set Files = F.Files
s = "Файлы из каталога " & PathList & VbCrLf
'Цикл по всем файлам
For Each File In Files
  'Добавляем строку с именем файла
  s = s & File.Name & VbCrLf
Next

'Выводим полученные строки на экран
WScript.Echo s
'*************  Конец *********************************************
Листинг 6.7. Построение списка файлов в каталоге (JScript)
Создание каталога

Создать новый каталог на диске можно либо с помощью метода CreateFolder объекта FileSystemObject, либо с помощью метода Add коллекции Folders. Оба эти метода используются в сценарии MakeFolder.vbs для создания в каталоге C:\Program Files подкаталогов Новая папка и Еще одна новая папка (листинг 6.8).

'*******************************************************************
' Имя: MakeFolder.vbs                                           
' Язык: VBScript                                                   
' Описание: Создание нового каталога                              
'*******************************************************************
'Объявляем переменные
Dim FSO, F, SubFolders

'Создаем объект FileSystemObject
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
'Создаем каталог C:\Program Files\Новая папка
FSO.CreateFolder("C:\Program Files\Новая папка")
'Создаем объект Folder для каталога C:\Program Files
Set F = FSO.GetFolder("C:\Program Files")
'Создаем коллекцию подкаталогов каталога C:\Program Files
Set SubFolders = F.SubFolders
'Создаем каталог C:\Program Files\Еще одна новая папка
SubFolders.Add "Еще одна новая папка"
'*************  Конец *********************************************
Листинг 6.8. Создание нового каталога (VBScript)
Создание текстового файла

Для создания текстового файла используется метод CreateTextFile объекта FileSystemObject, который имеет один обязательный текстовый параметр (путь к создаваемому файлу) и два необязательных логических параметра ( Overwrite и Unicode ).

Параметр Overwrite имеет значение в том случае, когда создаваемый файл уже существует. Если Overwrite равно True, то такой файл перепишется (старое содержимое будет утеряно), если же в качестве Overwrite указано False, то файл переписываться не будет. Если этот параметр вообще не указан, то существующий файл также не будет переписан.

Параметр Unicode указывает, в каком формате (ASCII или Unicode) следует создавать файл. Если Unicode равно True, то файл создается в формате Unicode, если же Unicode равно False или этот параметр вообще не указан, то файл создается в режиме ASCII.

В сценарии CreateTempFile.vbs (листинг 6.9) показано, каким образом можно создать файл со случайно выбранным именем (такие файлы часто используются для записи временных данных).

'*******************************************************************
' Имя: CreateTempFile.vbs                                                
' Язык: VBScript                                                   
' Описание: Создание временного файла со случайным именем         
'*******************************************************************
Dim FSO,FileName,F,s  'Объявляем переменные
'Создаем объект FileSystemObject
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
'Генерируем случайное имя файла
FileName = FSO.GetTempName
'Создаем файл с именем FileName
Set F = FSO.CreateTextFile(FileName, true) 
'Закрываем файл
F.Close
'Сообщаем о создании файла
WScript.Echo "Был создан файл " & FileName
'*************  Конец *********************************************
Листинг 6.9. Создание временного файла со случайным именем (VBScript)
Операции чтения и записи строк для текстового файла

Последовательный (строка за строкой) доступ к текстовому файлу обеспечивает объект TextStream. Методы этого объекта позволяют читать информацию из файла и записывать ее в него. Создается объект TextStream при открытии или создании текстового файла с помощью следующих методов:

  • CreateTextFile объектов FileSystemObject и Folder;
  • OpenTextFile объекта FileSystemObject;
  • OpenAsTextStream объекта File.

Перечисленные ранее методы позволяют открывать файл в разных режимах ввода/вывода (за это отвечает параметр Iomode ) с использованием разных форматов (в соответствии со значением параметра Format ) (см. табл. 6.2, 6.3)

Таблица 6.2. Параметр Iomode
Константа Значение Описание
ForReading 1 Файл открывается только для чтения, записывать информацию в него нельзя
ForWriting 2 Файл открывается для записи. Если файл с таким именем уже существовал, то при новой записи его содержимое теряется
ForAppending 8 Файл открывается для добавления. Если файл уже существовал, то информация будет дописываться в конец этого файла
Таблица 6.3. Параметр Format
Константа Значение Описание
TristateUseDefault -2 Файл открывается в формате, используемом системой по умолчанию
TristateTrue -1 Файл открывается в формате Unicode
TristateFalse 0 Файл открывается в формате ASCII

В листинге 6.10 приведен сценарий TextFile.vbs, в котором создается файл test1.txt и в него записываются строка текста. После этого файл открывается для чтения, строка считывается из него и выводится на экран.

'*******************************************************************
' Имя: TextFile.vbs                                                
' Язык: VBScript                                                  
' Описание: Запись строк в текстовый файл и чтение из него     
'*******************************************************************
Dim FSO,F,TextStream,s  'Объявляем переменные
' Инициализируем константы
Const ForReading = 1, ForWriting = 2, TristateUseDefault = -2

' Создаем объект FileSystemObject
Set FSO=WScript.CreateObject("Scripting.FileSystemObject")
' Создаем в текущем каталоге файл test1.txt
FSO.CreateTextFile "test1.txt"
' Создаем объект File для файла test1.txt
set F=FSO.GetFile("test1.txt")
' Создаем объект TextStream (файл открывается для записи)
Set TextStream=F.OpenAsTextStream(ForWriting, TristateUseDefault)
' Записываем в файл строку
TextStream.WriteLine "Это первая строка"
' Закрываем файл
TextStream.Close
' Открываем файл для чтения
Set TextStream=F.OpenAsTextStream(ForReading, TristateUseDefault)
' Считываем строку из файла
s=TextStream.ReadLine
' Закрываем файл 
TextStream.Close
' Отображаем строку на экране
WScript.Echo "Первая строка из файла test1.txt:" & vbCrLf & vbCrLf & s
'*************  Конец *********************************************
Листинг 6.10. Запись информации в текстовый файл и чтение из него (VBScript)
Копирование и перемещение файлов и каталогов

Для копирования файлов/каталогов можно применять метод CopyFile/CopyFolder объекта FileSystemObject или метод Copy соответствующего этому файлу/каталогу объекта File/Folder. Перемещаются файлы/каталоги с помощью методов MoveFile/MoveFolder объекта FileSystemObject или метода Move соответствующего этому файлу/каталогу объекта File/Folder.

Отметим, что при использовании всех этих методов процесс копирования или перемещения прерывается после первой возникшей ошибки. Кроме того, нельзя перемещать файлы и каталоги с одного диска на другой.

В листингах 6.11 и 6.12 приведен сценарий CopyFile.vbs, иллюстрирующий использование метода Copy. В этом сценарии на диске C создается файл TestFile.txt, который затем копируется на рабочий стол.

'*******************************************************************
' Имя: CopyFile.vbs                                                
' Язык: VBScript                                                   
' Описание: Создание и копирование файла                          
'*******************************************************************
'Объявляем переменные
Dim FSO,F,WshShell,WshFldrs,PathCopy

'Создаем объект FileSystemObject
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
'Создаем файл
Set F = FSO.CreateTextFile("C:\TestFile.txt", true)
'Записываем в файл строку
F.WriteLine "Тестовый файл"
'Закрываем файл
F.Close

'Создаем объект WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
'Создаем объект WshSpecialFolders
Set WshFldrs = WshShell.SpecialFolders
'Определяем путь к рабочему столу
PathCopy = WshFldrs.item("Desktop")+"\"
'Создаем объект File для файла C:\TestFile.txt
Set F = FSO.GetFile("C:\TestFile.txt")
'Копируем файл на рабочий стол
F.Copy PathCopy
'*************  Конец *********************************************
Листинг 6.11. Создание текстового файла и копирование его в другой каталог (VBScript)
Удаление файлов и каталогов

Для удаления файлов/каталогов можно применять метод DeleteFile/DeleteFolder объекта FileSystemObject или метод Delete соответствующего этому файлу/каталогу объекта File/Folder. Отметим, что при удалении каталога неважно, является ли он пустым или нет — удаление будет произведено в любом случае. Если же заданный для удаления файл/каталог не будет найден, то возникнет ошибка.

В листинге 6.12 приведен сценарий DeleteFile.vbs, в котором производится удаление предварительно созданного файла C:\TestFile.txt.

'*******************************************************************
' Имя: DeleteFile.vbs
' Язык: VBScript                                                   
' Описание: Создание и удаление файла                             
'*******************************************************************
'Объявляем переменные
Dim FSO,F,FileName

'Создаем объект FileSystemObject
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
'Задаем имя файла
FileName="C:\TestFile.txt"
'Создаем файл
Set F = FSO.CreateTextFile(FileName, true)
'Записываем в файл строку
F.WriteLine "Тестовый файл"
'Закрываем файл
F.Close
WScript.Echo "Файл создан"
FSO.DeleteFile FileName
WScript.Echo "Файл удален"
'*************  Конец *********************************************
Листинг 6.12. Создание и удаление файла (VBScript)
< Лекция 5 || Лекция 6: 12 || Лекция 7 >
Валентина Тюрина
Валентина Тюрина
Нажатие кнопок в сторонних программах
Александр Тагильцев
Александр Тагильцев
Где проводится профессиональная переподготовка?
Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Игорь Ермачков
Игорь Ермачков
Латвия, Рига