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

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

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

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

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

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

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

  • ForReading — чтение (значение по умолчанию). Указатель устанавливается на начало файла;
  • ForWriting — запись. Содержимое файла удаляется. Указатель устанавливается на начало файла;
  • ForAppending — добавление. Содержимое файла не удаляется. Указатель устанавливается на конец файла.

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

  • TristateFalse — 0 — кодировка ASCII (значение по умолчанию);
  • TristateTrue — -1 — кодировка Unicode;
  • TristateUseDefault — -2 — кодировка, используемая в системе по умолчанию.

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

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:

  • Size — размер файла;
  • Path — полный путь к файлу (например, D:\VBA\file1.txt);
  • ShortPath — короткий путь к файлу;
  • Drive — имя диска (например, D:);
  • Name — имя файла без пути;
  • ShortName — короткое имя файла;
  • Type — тип файла;
  • ParentFolder — ссылка на объект родительского каталога;
  • DateCreated — дата и время создания файла;
  • DateLastAccessed — дата и время последнего доступа к файлу;
  • DateLastModified — дата и время последнего изменения файла;
  • Attributes — позволяет определить какие атрибуты установлены для файла. Содержит сумму следующих значений:
  • 0 — Normal — обычный файл (только чтение);
  • 1 — ReadOnly — файл доступен только для чтения (чтение и запись);
  • 2 — Hidden — скрытый файл (чтение и запись);
  • 4 — System — системный файл (чтение и запись);
  • 16 — Directory — путь указывает на каталог (только чтение);
  • 32 — Archive — архивный файл (чтение и запись);
  • 64 — Alias — имя файла является псевдонимом (только чтение);
  • 128 — Compressed — сжатый файл (только чтение).

Проверить, установлен атрибут или нет, позволяет оператор 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:

  • Move <Новый путь> — позволяет переместить или переименовать файл:
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\"
  • Copy <Путь>[, <Перезапись>] — позволяет скопировать содержимое файла в другой файл. Если во втором параметре указано значение True (значение по умолчанию), то существующий файл будет перезаписан, а если значение False — то генерируется ошибка. Пример:
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\"
  • Delete [<Флаг>] — удаляет файл. Если в параметре указано значение True, то файл удаляется даже в случае, если он доступен только для чтения. По умолчанию параметр имеет значение False. Пример:
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

Visual Basic for Applications (VBA)
Статьи по Visual Basic for Applications (VBA)

Помощь сайту

Yandex-деньги: 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов