eXcellence-team eXcellence

Работа с файловой системой

В этой статье я расскажу об удобном способе работы с фаловой системой в VBA. Для начала создадим объект файловой системы:

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")

Этот объект включает в себя все необходимое для работы с файлами и папками Windows. Вот так можно получить список всех дисков в системе:

Set drives = fso.drives
For Each d In drives
  s = s + d.DriveLetter + ", "
Next d
MsgBox (s)

Попробуем узнать всю информацию о диске C: этот код покажет нам свободное место на диске, его полную емкость, тип файловой системы, метку, серийный номер и многое другое.
Set DriveC = FSO.GetDrive("C:")
Str = "Диск C:" & vbCrLf & _
 "AvailableSpace: " & DriveC.AvailableSpace & vbCrLf & _
 "DriveLetter: " & DriveC.DriveLetter & vbCrLf & _
 "DriveType: " & DriveC.DriveType & vbCrLf & _
 "FileSystem: " & DriveC.FileSystem & vbCrLf & _
 "FreeSpace: " & DriveC.FreeSpace & vbCrLf & _
 "IsReady: " & DriveC.IsReady & vbCrLf & _
 "Path: " & DriveC.Path & vbCrLf & _
 "RootFolder (Path): " & DriveC.RootFolder.Path & vbCrLf & _
 "SerialNumber: " & DriveC.SerialNumber & vbCrLf & _
 "ShareName: " & DriveC.ShareName & vbCrLf & _
 "TotalSize: " & DriveC.TotalSize & vbCrLf & _
 "VolumeName: " & DriveC.VolumeName
MsgBox Str

С дисками разобрались, теперь перейдем к папкам. Объект папки создается так:

Set Folder = FSO.GetFolder("C:\Program Files")


Или так:

Set Folder = FSO.GetSpecialFolder(0)

Или вот так:

Set DriveC = FSO.GetDrive("C:")
Set Folder = DriveC.RootFolder

Получим список всех папок в C:\Program Files:

Set Folder = fso.GetFolder("C:\Program Files")
For Each SubFolder In Folder.SubFolders
  s = s + SubFolder.Name + vbCrLf
Next
MsgBox (s)

А теперь посмотрим файлы на диске D:

Set Folder = fso.GetFolder("d:\")
For Each f In Folder.Files
  s = s + f.Name + vbCrLf
Next
MsgBox (s)

Более подробное описание свойств и методов FileSystemObject можно найти в документации.