СТАТЬЯ
12.09.01

Предыдущая часть

FSO - тяжелая артиллерия VB6

© Армен Мнацаканян

Статья была опубликована на сайте www.citforum.ru

Работа с папками

Этот список показывает общие задачи работы с папками и методы для их выполнения:
Задача Метод
Создать папку FileSystemObject.CreateFolder
Удалить папку Folder.Delete или FileSystemObject.DeleteFolder
Переместить папку Folder.Move или FileSystemObject.MoveFolder
Копировать папку Folder.Copy или FileSystemObject.CopyFolder
Возвратить имя папки Folder.Name
Выяснить, существует ли папка на дисководе FileSystemObject.FolderExists
Получить образец существующего объекта Folder FileSystemObject.GetFolder
Выяснить имя папки, родителя папки FileSystemObject.GetParentFolderName
Выяснить путь системных папок FileSystemObject.GetSpecialFolder

Пример ниже показывает использование объектов 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
Чтение текстового файла целиком ReadAll

Если вы используете метод 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 имеет два метода для перемещения, копирования и удаления файлов:
Задача Метод
Переместить файл File.Move или FileSystemObject.MoveFile
Скопировать файл File.Copy или FileSystemObject.CopyFile
Удалить файл File.Delete или FileSystemObject.DeleteFile

Следующий пример создает текстовый файл в корневой директории дисковода с:, пишет в него некоторую информацию, перемещает его в каталог, называемый \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

Дополнительная информация

Дополнительную информацию Вы можете получить в компании Interface Ltd.

Отправить ссылку на страницу по e-mail
Обсудить на форуме Microsoft


Interface Ltd.
Тel/Fax: +7(095) 105-0049 (многоканальный)
Отправить E-Mail
http://www.interface.ru
Ваши замечания и предложения отправляйте автору
По техническим вопросам обращайтесь к вебмастеру
Документ опубликован: 12.09.01