On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru






 

File System Object

Гайдар Магдануров

При использовании File System Object (сокращенно FSO) работа с файлами, папками и дисками значительно упрощается, чем при использовании стандартных операторов Visual Basic. Поэтому благодаря использовании FSO возможно более простое выполнение операций с объектами файловой системы, не требующих от программиста больших усилий. При этом это наиболее простой способ работы с файлами и текстовыми данными из VBScript, что очень часто бывает необходимым при создании ASP, таких как гостевые книги, форумы и чаты.

Так вот, для использования FSO вам нужно подключить библиотеку Microsoft Scripting Runtime. После этого, для получения доступа к возможностям библиотеки вам нужно объявить ее, что можно сделать двумя способами:

Dim myFSO As Scripting.FileSystemObject

Private Sub Form_Load()
Set myFSO = New Scripting.FileSystemObject
End Sub

Или так:

Dim myFSO As Object

Private Sub Form_Load()
Set myFSO = CreateObject("Scripting.FileSystemObject")
End Sub
 

Лично мне нравиться второй вариант, поэтому я буду использовать его.

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

Private Sub Command1_Click()
Dim myFSO As Object 'Объявляю объектную переменную
Dim myTS As TextStream 'Объявляем текстовый поток
Set myFSO = CreateObject("Scripting.FileSystemObject") 'Создаем объект файловой системы
Set myTS = myFSO.CreateTextFile(Text1.Text, True) 'Открываем поток создавая файл, перезаписывая существующий (True)
myTS.Write Text2.Text 'Пишем содержимое второго текстового окна
myTS.Close 'Закрываем поток
Set myFSO = Nothing 'Чистим память от наших файловых объектов
End Sub
 

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

Set myTS = fso.OpenTextFile("c:\test.txt", ForWriting)

Теперь переделаем эту программу для чтения данных из файла. Делаем для text2 multiline=true, что бы отображать все содержимое нашего файла. Добавляете следующий код в событие клика по кнопке.

Private Sub Command1_Click()
Dim myFSO As Object
Dim myTS As TextStream
Set myFSO = CreateObject("Scripting.FileSystemObject")
Dim myfile As File 'Объявляем файловую переменную
Set myfile = myFSO.GetFile(Text1.Text) 'Присваеваем нашей переменной файла - файл, имя которого введено в text1
Set myTS = myfile.OpenAsTextStream(ForReading) 'Открываем для чтения
Text2.Text = myTS.ReadAll ' Читаем весь файл
myTS.Close
End Sub

Теперь приведу методы TextStream:

Write

Пишет в файл.

WriteLine

Пишет в файл одну строку.

WriteBlankLines

Пишет заданное количество строк.

Skip

Пропускает заданное число символов.

SkipLine

Пропускает одну строку.

Read

Читает.

ReadAll

Читает все содержимое файла.

ReadLine

Читает строку.

Close

Закрывает текстовый поток.

Мы научились (я надеюсь ;-) работать с текстовыми файлами, а теперь на плохо бы научиться работать с файлами и папками вообще.  Для этого существуют следующие методы:

CopyFile

Копирует файлы.

CopyFolder

Копирует папки.

MoveFile

Перемещает файлы.

MoveFolder

Перемещает папки.

DeleteFile

Удаляет файлы.

DeleteFolder

Удаляет папки.

GetParentFolderName

Получает имя доминантной папки.

GetAbsolutePathName

Получает полный путь.

GetDriveName

Получает имя устройства.

GetFileName

Получает имя файла

FileExist

Проверяет наличие файла.

FolderExist

Проверяет наличие папки.

DriveExist

Проверяет наличие устройства.

GetSpecialFolder

Получает путь к папкам системы. Temp,System32,System,Windows.

Использование большинства этих методов одинаково, поэтому разберу наиболее сложные.

Копирование/перемещение файлов и папок.

myFSO.CopyFile "File1","File2", True/False ' указывает перезаписывать файл или нет.

Аналогично перемещение, только вместо Copy - Move.

Теперь немного поработаем с устройствами. Создайте форму, на которой разместите текстовое окно и кнопу. В код клика по кнопке добавляете следующее:

Private Sub Command1_Click()
Dim myFSO As Object
Dim myDRV As Drive
Set myFSO = CreateObject("Scripting.FileSystemObject")
Set myDRV = myFSO.GetDrive(myFSO.GetDriveName(Text1.Text)) 'Диск задается в текстовом поле text1, обязательно так

X: !
    a = "Имя тома:  " & myDRV.VolumeName & vbCrLf
    b = "Доступное пространство:  " & myDRV.AvailableSpace / 1048576 & " MB" & vbCrLf
    c = "Серийный номер:  " & myDRV.SerialNumber & vbCrLf
    d = "Тип устройства:  " & myDRV.DriveType & vbCrLf
    e = "Общий размер:  " & myDRV.TotalSize & vbCrLf
    f = "Сетевое имя:  " & myDRV.ShareName & vbCrLf
    g = "Готовнорсть:  " & myDRV.IsReady
Set myFSO = Nothing
MsgBox a & b & c & d & e & f & g, vbInformation, "Информация о диске"
End Sub

Не правда ли, удобно? Не нужно лезть в дебри API, все уже сделано за вас. Но учтите, что в данную функцию буква диска должна входить с двоеточием, иначе будет ошибка.

При работе с папками их создание осуществляется командой CreateFolder, так же как и создание текстового файла.

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

Private Sub Command1_Click()
Dim myFSO As Object
Dim myFLDR As Folder
Set myFSO = CreateObject("Scripting.FileSystemObject")
Set myFLDR = myFSO.GetFolder(Text1.Text) 'Существенное отличие от устройств
    a = "Доминантная папка:  " & myFLDR.ParentFolder & vbCrLf
    b = "Атрибуты:  " & myFLDR.Attributes
Set myFSO = Nothing
MsgBox a & b
End Sub
 

Для работы с файлами не изменяйте форму, а только перепишите код:

Private Sub Command1_Click()
Dim myFSO As Object
Dim myFL As File
Set myFSO = CreateObject("Scripting.FileSystemObject")
Set myFL = myFSO.GetFile(Text1.Text)
    a = "Место расположения:  " & myFL.ParentFolder & vbCrLf
    b = "Атрибуты:  " & myFL.Attributes & vbCrLf
    c = "Создан:  " & myFL.DateCreated & vbCrLf
    d = "Последний раз запрашивался:  " & myFL.DateLastAccessed & vbCrLf
    e = "Последний раз изменялся:  " & myFL.DateLastModified & vbCrLf
    f = "Размер:  " & myFL.Size & " байт"
Set myFSO = Nothing
MsgBox a & b & c & d & e & f
End Sub
 

При таком способе работы становятся доступны методы вроде Delete, Copy, Move, OpemAsTextStream.  А для папок CreateTextFile.

Вот основные методы работы с объектами файловой системы с помощью Microsoft Scripting Runtime, и эти методы очень помогают при создании ASP работающих с файлами и папками.



Литература по Basic