Объект File. Работа с файлами

Объект File позволяет выполнять различные манипуляции с файлом, например, копировать или удалить файл, а также предоставляет доступ к информации о файле, например, можно получить размер файла или дату и время создания файла. Создать объект позволяет метод GetFile(<Имя файла>) объекта FileSystemObject. В параметре <Имя файла> указывается путь к файлу. Путь может быть абсолютным или относительным. При указании относительного пути полный путь определяется с учетом местоположения текущего рабочего каталога и текущего диска. Пример создания объекта:

Dim fso As New FileSystemObject
Dim Файл As File
Set Файл = fso.GetFile(ThisWorkbook.Path & "\file1.txt")
' Работаем с файлом

Открытие файла

Открыть файл позволяет метод OpenAsTextStream() объекта File, который возвращает ссылку на объект TextStream. Формат метода:

OpenAsTextStream([<Режим>[, <Кодировка>]])

Необязательный параметр <Режим> задает режим открытия файла:

В необязательном параметре <Кодировка> указываются следующие значения:

Пример открытия файла на запись:

Dim fso As New FileSystemObject
Dim f As TextStream, Файл As File
Set Файл = fso.GetFile(ThisWorkbook.Path & "\file1.txt")
Set f = Файл.OpenAsTextStream(ForWriting)
f.WriteLine "Строка"
f.Close               ' Закрываем файл

Проверка существования файла

Проверить существование файла позволяет метод FileExists(<Имя файла>) объекта FileSystemObject. В параметре <Имя файла> указывается путь к файлу. Метод возвращает значение True, если файл существует и False — в противном случае. Пример:

Dim fso As New FileSystemObject, name As String
name = ThisWorkbook.Path & "\file2.txt"
If fso.FileExists(name) = True Then
   Debug.Print "Существует"
Else
   Debug.Print "Нет"
End If

Получение информации о файле

Получить информацию о файле позволяют следующие свойства объекта File:

Проверить, установлен атрибут или нет, позволяет оператор And. Если атрибут установлен, то результатом операции будет ненулевое значение. Если этому свойству присвоить новое значение, то атрибуты файла (доступные для записи) будут изменены.

Пример получения и изменения атрибутов файла показан в листинге 13.1.

Листинг 13.1. Получение и изменение атрибутов файла

Dim fso As New FileSystemObject
Dim Файл As File
Set Файл = fso.GetFile(ThisWorkbook.Path & "\file1.txt")
Debug.Print Файл.Size              ' 8
Debug.Print Файл.Path              ' D:\VBA\file1.txt
Debug.Print Файл.ShortPath         ' D:\VBA\file1.txt
Debug.Print Файл.Drive             ' D:
Debug.Print Файл.Name              ' file1.txt
Debug.Print Файл.ShortName         ' file1.txt
Debug.Print Файл.Type              ' Текстовый документ
Debug.Print Файл.ParentFolder.Name ' VBA
Debug.Print Файл.DateCreated       ' 14.10.2012 19:05:55
Debug.Print Файл.DateLastAccessed  ' 15.10.2012 21:45:43
Debug.Print Файл.DateLastModified  ' 15.10.2012 21:45:43
Debug.Print Файл.Attributes And Hidden  ' 0 (не установлен)
Файл.Attributes = Файл.Attributes Or Hidden
Debug.Print Файл.Attributes And Hidden  ' 2 (установлен)

Манипулирование файлами

Для манипулирования файлами предназначены следующие методы объекта File:

Dim fso As New FileSystemObject
Dim Файл As File
Set Файл = fso.GetFile(ThisWorkbook.Path & "\file1.txt")
Файл.Move ThisWorkbook.Path & "\file.txt"

Вместо метода Move() можно воспользоваться методом MoveFile() объекта FileSystemObject. Формат метода:

MoveFile <Старый путь>, <Новый путь>

Пример переименования файла file1.txt в file3.txt:

Dim fso As New FileSystemObject
fso.MoveFile ThisWorkbook.Path & "\file1.txt", _
             ThisWorkbook.Path & "\file3.txt"

Параметр <Старый путь> может содержать подстановочные знаки в последнем компоненте пути. Например, переместить все текстовые файлы из каталога folder1 в каталог folder2 можно так:

Dim fso As New FileSystemObject
fso.MoveFile ThisWorkbook.Path & "\folder1\*.txt", _
             ThisWorkbook.Path & "\folder2\"
Dim fso As New FileSystemObject
Dim Файл As File
Set Файл = fso.GetFile(ThisWorkbook.Path & "\file.txt")
Файл.Copy ThisWorkbook.Path & "\file1.txt"

Вместо метода Copy() можно воспользоваться методом CopyFile() объекта FileSystemObject. Формат метода:

CopyFile <Старый путь>, <Новый путь>[, <Перезапись>]

Пример создания копии файла file3.txt:

Dim fso As New FileSystemObject
fso.CopyFile ThisWorkbook.Path & "\file3.txt", _
             ThisWorkbook.Path & "\file1.txt"

Параметр <Старый путь> может содержать подстановочные знаки в последнем компоненте пути. Например, скопировать все текстовые файлы из каталога folder2 в каталог folder1 можно так:

Dim fso As New FileSystemObject
fso.CopyFile ThisWorkbook.Path & "\folder2\*.txt", _
             ThisWorkbook.Path & "\folder1\"
Dim fso As New FileSystemObject
Dim Файл As File
Set Файл = fso.GetFile(ThisWorkbook.Path & "\file.txt")
Файл.Delete True

Вместо метода Delete() можно воспользоваться методом DeleteFile() объекта FileSystemObject. Формат метода:

DeleteFile <Путь>[, <Флаг>]

Пример удаления файла file3.txt:

Dim fso As New FileSystemObject
fso.DeleteFile ThisWorkbook.Path & "\file3.txt"

Создание временных файлов

С помощью метода GetTempName() объекта FileSystemObject можно сгенерировать уникальное имя для временного файла. Обратите внимание на то, что метод не создает файл, а лишь возвращает уникальное имя в виде строки (например, "radDA657.tmp "). Пример:

Dim fso As New FileSystemObject, f As TextStream
Dim name As String
name = fso.GetTempName()
Set f = fso.OpenTextFile(name, ForWriting, True)
' Работаем с файлом
f.Close             ' Закрываем файл
fso.DeleteFile name ' Удаляем файл

Семейство Files

Семейство Files содержит несколько объектов File. Доступ к объекту в коллекции выполняется с помощью метода Item(<Индекс>) или с помощью цикла For Each...Next. Получить количество объектов в коллекции позволяет свойство Count.

С помощью свойства Files объекта Folder можно получить ссылку на коллекцию всех файлов в каталоге. В качестве примера выведем названия всех файлов в каталоге:

Dim fso As New FileSystemObject, fs As Files
Dim Каталог As Folder, Item
Set Каталог = fso.GetFolder(ThisWorkbook.Path)
Set fs = Каталог.Files
For Each Item In fs
   Debug.Print Item.name
Next
Предыдущая статья Все статьи Следующая статья