Объект 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:

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

Dim fso As New FileSystemObject, f As TextStream
Dim Каталог As Folder
Set Каталог = fso.GetFolder(ThisWorkbook.Path & "\folder1")
Set f = Каталог.CreateTextFile("file1.txt")
' Работаем с файлом
f.Close ' Закрываем файл
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"

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

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"

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

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
Предыдущая статья Все статьи Следующая статья