Объект Folder. Работа с каталогами

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

Dim fso As New FileSystemObject
Dim Каталог As Folder
Set Каталог = fso.GetFolder(ThisWorkbook.Path & "\folder1")
' Работаем с каталогом

Создание каталога

Создать новый каталог позволяет метод CreateFolder(<Имя каталога>) объекта FileSystemObject. В параметре <Имя каталога> указывается абсолютный или относительный путь к каталогу. Метод возвращает ссылку на объект Folder. Если каталог уже существует, то генерируется ошибка. Пример создания каталога folder2:

Dim fso As New FileSystemObject
Dim Каталог As Folder
Set Каталог = fso.CreateFolder(ThisWorkbook.Path & "\folder2")

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

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

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

Получение информации о каталоге

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

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

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

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

Листинг 13.2. Получение и изменение атрибутов каталога

Dim fso As New FileSystemObject
Dim Каталог As Folder
Set Каталог = fso.GetFolder(ThisWorkbook.Path & "\folder1")
Debug.Print Каталог.Size
Debug.Print Каталог.Path              ' D:\VBA\folder1
Debug.Print Каталог.ShortPath         ' D:\VBA\folder1
Debug.Print Каталог.Name              ' folder1
Debug.Print Каталог.ShortName         ' folder1
Debug.Print Каталог.Drive             ' D:
Debug.Print Каталог.Type              ' Папка с файлами
Debug.Print Каталог.ParentFolder.Name ' VBA
Debug.Print Каталог.IsRootFolder      ' False
Debug.Print TypeName(Каталог.SubFolders) ' Folders
Debug.Print TypeName(Каталог.Files)   ' Files
Debug.Print Каталог.DateCreated       ' 08.10.2012 19:36:27
Debug.Print Каталог.DateLastAccessed  ' 15.10.2012 21:45:43
Debug.Print Каталог.DateLastModified  ' 08.10.2012 19:53:23
Debug.Print Каталог.Attributes And Hidden  ' 0 (не установлен)
Каталог.Attributes = Каталог.Attributes Or Hidden
Debug.Print Каталог.Attributes And Hidden  ' 2 (установлен)

Манипулирование каталогами

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

  • CreateTextFile(<Имя файла>[, <Перезапись>[, <Кодировка>]]) — создает новый файл в каталоге. В параметре <Имя файла> указывается название файла. Если в необязательном параметре <Перезапись> указано значение True (значение по умолчанию), то существующий файл будет перезаписан, а если значение False — то при существовании файла генерируется ошибка. Если в необязательном параметре <Кодировка> указано значение False (значение по умолчанию), то файл создается в кодировке ASCII, а если значение True — то в кодировке Unicode. Метод возвращает объект TextStream, с помощью которого производится дальнейшая работа с файлом. Пример создания и закрытия файла:
Dim fso As New FileSystemObject, f As TextStream
Dim Каталог As Folder
Set Каталог = fso.GetFolder(ThisWorkbook.Path & "\folder1")
Set f = Каталог.CreateTextFile("file1.txt")
' Работаем с файлом
f.Close ' Закрываем файл
  • Move <Новый путь> — позволяет переместить или переименовать каталог:
Dim fso As New FileSystemObject
Dim Каталог As Folder
Set Каталог = fso.GetFolder(ThisWorkbook.Path & "\folder1")
Каталог.Move ThisWorkbook.Path & "\folder3"

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

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

Пример переименования каталога folder1 в folder3:

Dim fso As New FileSystemObject
fso.MoveFolder ThisWorkbook.Path & "\folder1", _
               ThisWorkbook.Path & "\folder3"

Параметр <Старый путь> может содержать подстановочные знаки в последнем компоненте пути;

  • Copy <Путь>[, <Перезапись>] — позволяет скопировать содержимое каталога в другой каталог. Если во втором параметре указано значение True (значение по умолчанию), то существующий каталог будет перезаписан, а если значение False — то генерируется ошибка. Пример:
Dim fso As New FileSystemObject
Dim Каталог As Folder
Set Каталог = fso.GetFolder(ThisWorkbook.Path & "\folder3")
Каталог.Copy ThisWorkbook.Path & "\folder1"

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

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

Пример копирования каталога folder3 в folder1:

Dim fso As New FileSystemObject
fso.CopyFolder ThisWorkbook.Path & "\folder3", _
               ThisWorkbook.Path & "\folder1"

Параметр <Старый путь> может содержать подстановочные знаки в последнем компоненте пути;

  • Delete [<Флаг>] — удаляет каталог. Если в параметре указано значение True, то каталог удаляется даже в случае, если он доступен только для чтения. По умолчанию параметр имеет значение False. Пример:
Dim fso As New FileSystemObject
Dim Каталог As Folder
Set Каталог = fso.GetFolder(ThisWorkbook.Path & "\folder3")
Каталог.Delete True

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

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

Пример удаления каталога folder3:

Dim fso As New FileSystemObject
fso.DeleteFolder ThisWorkbook.Path & "\folder3"

Семейство Folders

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

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

Dim fso As New FileSystemObject, fs As Folders
Dim Каталог As Folder, Item
Set Каталог = fso.GetFolder(ThisWorkbook.Path)
Set fs = Каталог.SubFolders
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
Скриншот реквизитов