Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Объект 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
Помощь сайту
Yandex-деньги: 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов