|
||||||||||||||||||||||||||||||||||||||||||||||||
FSO - тяжелая артиллерия VB6
Время создания: 16.03.2019 23:43
Текстовые метки: FSO, vba
Раздел: Разные закладки - VBA - FSO
Запись: xintrea/mytetra_db_adgaver_new/master/base/1514554786diffbvexge/text.html на raw.githubusercontent.com
|
||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||
FSO - тяжелая артиллерия VB6 Армен Мнацаканян Введение в объектную модель FSO Новая особенность VB6 - объектная файловая система (FSO), которая представляет собой основанный на объектах инструмент для работы с папками и файлами. Это позволяет вам использовать знакомый синтаксис object.method с богатым набором свойств, методов и событий для работы с папками и файлами в дополнение к использованию традиционных методов и команд Visual Basic. Объектная модель FSO дает вашим прикладным программам возможность создавать, изменять, перемещать и удалять папки. С легкостью можно собрать информацию о системных папках, их наличии и расположении. Вы также можете получать всю остальную информацию о дисках, папках и файлах: их имена, атрибуты, даты создания или изменения и т.д. Объектная модель FSO позволяет намного проще проводить обработку файлов. При обработке файлов ваша основная цель состоит в том, чтобы сохранить данные в эффективном, легко доступном, экономящем ресурсы формате. Всю остальную работу - собственно размещение данных на носителе - берет на себя FSO. Вы сможете создавать файлы, добавлять, изменять и считывать данные. FSO, которая содержится в библиотеке типов Scripting type library (scrrun.dll), поддерживает создание текстовых файлов и манипулирование ими через объект TextStream. Однако она не поддерживает создание или манипулирование двоичными файлами. Для управления двоичными файлами по-прежнему приходится использовать старые методы - команду Open с соответствующим флагом. Объекты файловой системы FSO имеет следующие объекты:
Программирование в объектной модели FSO Программирование в объектной модели FSO включает три основных задачи:
FSO содержится в библиотеке типов, называемой Scripting, которая размещена в файле scrrun.dll. Эту библиотеку надо прописать в меню References | Microsoft Scripting Runtime (если вы этого еще не сделали). С помощью Object Browser можно просмотреть список объектов, свойств, методов, событий и констант, включенных в FSO. Создание объекта FileSystemObject Первый шаг - создание объект FileSystemObject для последующей работы с ним. Это можно сделать двумя способами:
Обратите внимание, что первый метод работает только в Visual Basic, в то время как второй метод работает и в Visual Basic, и в VBScript. Использование соответствующих методов Следующий шаг - использование соответствующих методов объекта FileSystemObject. Например, если вы хотите создать новую папку или файл, надо использовать методы CreateFolder или CreateTextFile. Если вы хотите удалить объекты, используйте методы DeleteFile или DeleteFolder объекта FileSystemObject, или метод Delete объектов File или Folder. (FSO, естественно, не поддерживает создание или удаление объектов типа Drive). Используя соответствующие методы, вы можете также копировать и перемещать файлы и папки. Обратите внимание, что некоторые функциональные возможности в модели объекта FileSystemObject избыточны. Например, вы можете скопировать файл двумя путями: используя метод CopyFile объекта FileSystemObject, или используя метод Copy объекта File. Оба подхода дают одинаковые результаты и существуют для того, чтобы обеспечить максимум гибкости при программировании. Работа с существующими дисководами, файлами и папками Чтобы получить доступ к существующему дисководу, файлу или папке, используется соответствующий метод Get объекта FileSystemObject: GetDrive; GetFolder; GetFile. Например: Dim fso As New FileSystemObject, fil As File
Set fil = fso.GetFile("c:\test.txt")
Обратите внимание, однако, что вы не должны использовать методы Get для только что созданных объектов, так как функции создания объектов сразу возвращают вызывающей программе ссылку на созданный объект. Например, если вы создаете новую папку, используя метод CreateFolder, вам не нужно использовать метод GetFolder, чтобы обратиться к ее свойствам (таким как Name, Path, Size и т.д.), так как функция CreateFolder сразу возвращает ссылку на созданный объект. Чтобы получить доступ к свойствам созданной папки, достаточно воспользоваться соответствующей переменной (в данном случае fldr): Private Sub Create_Folder()
Dim fso As New FileSystemObject, fldr As Folder
Set fldr = fso.CreateFolder("C:\MyTest")
MsgBox "Created folder: " & fldr.Name
End Sub
Обращение к свойствам объекта Получив доступ к объекту с помощью методов Get (или создав его), вы можете обращаться к его свойствам. Например, сначала вы получаете доступ к корневому каталогу диска c: методом GetFolder (так как папка уже существует): Set fldr = fso.GetFolder("c:\")
После этого вы можете проверить его свойство Name: Debug.Print "Folder name is: "; fldr.Name
Если Вы хотите узнать дату и время последнего изменения файла, используйте следующий синтаксис: Dim fso As New FileSystemObject, fil As File
'Получаем объект File, чтобы сделать запрос
Set fil = fso.GetFile("C:\detlog.txt")
'Печатаем информацию
Debug.Print "File last modified: "; fil.DateLastModified
Работа с дисководами и папками Объектная модель FSO может работать с дисководами и папками точно так же, как вы работаете с ними с помощью Windows Explorer в интерактивном режиме, т.е. вы можете копировать и перемещать файлы, получать информацию относительно дисководов и папок, и т.д. Получение информации о дисководах Объект Drive позволяет вам получать информацию о различных дисководах, присоединенных к системе или физически или через сеть. Его свойства позволяют Вам получить следующую информацию:
Пример использования объекта Drive (Дисковод) На пример ниже показывается как использовать объект Drive, чтобы получить полную информацию о дисководе. Не забудьте, что в следующем коде все обращения к фактическому объекту Drive осуществляются с помощью переменной drv, содержащей ссылку на объект, которая получена с помощью метода GetDrive: Private Sub Command3_Click()
Dim fso As New FileSystemObject, drv As Drive, s As String
Set drv = fso.GetDrive(fso.GetDriveName("c:"))
s = "Drive " & UCase("c:") & " - "
s = s & drv.VolumeName & vbCrLf
s = s & "Total Space: " & FormatNumber(drv.TotalSize/1024, 0)
s = s & " Kb" & vbCrLf
s = s & "Free Space: " & FormatNumber(drv.FreeSpace/1024, 0)
s = s & " Kb" & vbCrLf
MsgBox s
End Sub
Работа с папками Этот список показывает общие задачи работы с папками и методы для их выполнения:
Пример ниже показывает использование объектов Folder и FileSystemObject для управления папками и получения информацию о них: Private Sub Command10_Click()
'Получаем образец FileSystemObject
Dim fso As New FileSystemObject, fldr As Folder, s As String
' Объект Get Drive
Set fldr = fso.GetFolder("c:")
' Печатаем родительское имя папки
Debug.Print "Parent folder name is: " & fldr
' Печатаем имя дисковода
Debug.Print "Contained on drive " & fldr.Drive
' Печатаем имя корневой папки
If fldr.IsRootFolder = True Then
Debug.Print "This folder is a root folder."
Else
Debug.Print "This folder isn't a root folder."
End If
' Создаем новую папку объектом FileSystemObject
fso.CreateFolder ("c:\Bogus")
Debug.Print "Created folder C:\Bogus"
' Печатаем основное имя папки
Debug.Print "Basename = " & fso.GetBaseName("c:\bogus")
' Удаляем недавно созданную папку
fso.DeleteFolder ("c:\Bogus")
Debug.Print "Deleted folder C:\Bogus"
End Sub
Работа с файлами Вы можете работать с файлами в Visual Basic как используя новые объектно-ориентированные методы типа Copy, Delete, Move и OpenAsTextStream, так и с помощью старых функций - Open, Close, FileCopy, GetAttr и т.д. Обратите внимание, что вы можете перемещать, копировать или удалять файлы независимо от типа файла. Имеются две главных категории манипулирования файлами:
Создание файлов и добавления данных с помощью File System Objects Есть три способа создать последовательный текстовый файл (иногда упоминаемый как "текстовый поток", text stream). Один путь состоит в том, чтобы использовать метод CreateTextFile. Например, создаем пустой текстовый файл: Dim fso As New FileSystemObject, fil As File
Set fil = fso.CreateTextFile("c:\testfile.txt", True)
Обратите внимание, что текущая версия FSO еще не поддерживает создание произвольных (random) или двоичных (binary) файлов. Другой путь состоит в том, чтобы использовать метод OpenTextFile объекта FileSystemObject с установкой флага ForWriting: Dim fso As New FileSystemObject, ts As New TextStream
Set ts = fso.OpenTextFile("c:\test.txt", ForWriting)
Третий путь - вы можете использовать метод OpenAsTextStream с установкой флага ForWriting: Dim fso As New FileSystemObject, fil As File, ts As TextStream
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateTextFile ("test1.txt")
Set fil = fso.GetFile("test1.txt")
Set ts = fil.OpenAsTextStream(ForWriting)
Добавление данных к файлу Когда текстовый файл создан, вы можете добавлять в него данные. Для этого необходимо:
Чтобы открыть файл вы можете использовать любой из двух методов: метод OpenAsTextStream объекта File или метод OpenTextFile объекта FileSystemObject. Чтобы записать данные в открытый текстовый файл, используйте методы Write или WriteLine объекта TextStream. Единственное различие между Write и WriteLine - то, что WriteLine добавляет символы новой строки к концу строки. Если Вы хотите добавлять символы новой строки в текстовый файл без записи других символов, используйте метод WriteBlankLines. Чтобы закрыть открытый файл, используйте метод Close объекта TextStream. Sub Create_File()
Dim fso, txtfile
Set fso = CreateObject("Scripting.FileSystemObject")
Set txtfile = fso.CreateTextFile("c:\testfile.txt", True)
'Запись линии
txtfile.Write ("This is a test. ")
'Запись линии с символом newline
txtfile.WriteLine("Testing 1, 2, 3.")
'Запись трех символов newline в файл
txtfile.WriteBlankLines(3)
txtfile.Close
End Sub
Чтение файлов с помощью FSO Для чтения данных из текстового файла используйте методы Read, ReadLine или ReadAll объекта TextStream:
Если вы используете метод Read или ReadLine и хотите перейти к определенной части файла, воспользуйтесь методами Skip или SkipLine для пропуска определенного числа символов (или, соответственно, строк). Полученный в результате использования этих методов текст может быть сохранен в символьной переменной и обрабатываться функциями Left, Right и Mid. Обратите внимание, что константа vbNewLine содержит символ или символы (в зависимости от операционной системы) перевода курсора на следующую строку (возврат каретки). Некоторые символьные переменные могут содержать в конце эти непечатаемые символы. Sub Read_Files()
Dim fso As New FileSystemObject, txtfile
Dim fil1 As File, ts As TextStream
Set txtfile = fso.CreateTextFile("c:\testfile.txt", True)
MsgBox "Writing file"
' Запись линии
Set fil1 = fso.GetFile("c:\testfile.txt")
Set ts = fil1.OpenAsTextStream(ForWriting)
ts.Write "Hello World"
ts.Close
' Чтение содержания файла
Set ts = fil1.OpenAsTextStream(ForReading)
s = ts.ReadLine
MsgBox s
ts.Close
End Sub
Перемещение, копирование и удаление файлов FSO имеет два метода для перемещения, копирования и удаления файлов:
Следующий пример создает текстовый файл в корневой директории дисковода с:, пишет в него некоторую информацию, перемещает его в каталог, называемый \tmp, затем копирует его в каталог, называемый \temp и, наконец, удаляет копии из обоих каталогов. Чтобы этот пример корректно сработал, удостоверьтесь, что на диске c: в корневой папке существуют каталоги \tmp и \temp. (Для упрощения примера в него не встроена проверка этого условия. В реальной программе, конечно, необходимо сначала убедиться в существовании целевой папки и при ее отсутствии создать.) Sub Manip_Files()
Dim fso As New FileSystemObject, txtfile, fil1, fil2
Set txtfile = fso.CreateTextFile("c:\testfile.txt", True)
MsgBox "Writing file"
txtfile.Write ("This is a test.")
txtfile.Close
MsgBox "Moving file to c:\tmp"
' Код обработки файла в корне C:\
Set fil1 = fso.GetFile("c:\testfile.txt")
' Перемещаем файл в директорию \tmp
fil1.Move ("c:\tmp\testfile.txt")
MsgBox " Копируем файл в c:\temp"
' Копируем файл в \temp
fil1.Copy ("c:\temp\testfile.txt")
MsgBox "Удаляем файлы"
' Код получения текущих дерикторий файлов
Set fil1 = fso.GetFile("c:\tmp\testfile.txt")
Set fil2 = fso.GetFile("c:\temp\testfile.txt")
' Удаляем дайлы
fil1.Delete
fil2.Delete
MsgBox "Все!"
End Sub
© Copyright 2000, "Азбука Visual Basic" . |
||||||||||||||||||||||||||||||||||||||||||||||||
Так же в этом разделе:
|
||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||
|