
4. Робота з каталогами та пристроями
Файл знаходиться на самому нижньому рівні зберігання інформації в файловій системі комп'ютера. Вище в ієрархії файлової системи розташовані папки та пристрої. Під пристроєм розуміється не тільки жорсткий диск, але і, наприклад, пристрій для читання CD-ROM.
Для операцій з папками і пристроями в Visual Basic. NET існує набір методів, які дозволяють створювати і видаляти папки, перейменовувати їх, розкривати їх вміст. Для роботи з каталогами існують класи Directory і Directoryinfo.
Основні методи класів Directory і Directoryinfo:
Виконувана дія |
Методи і властивості класса DirectoryInfo |
Методи класса Directory |
Створення каталогу |
Create |
CreateDirectory |
Створення підкаталогу |
CreateSubdirectory |
немає |
Видалення каталогу |
Delete |
Delete |
Отримання списку підкаталогів зазначеного каталогу |
GetDirectories |
GetDirectories |
Отримання списку файлів каталогу |
GetFiles |
GetFiles |
Отримання списку файлів і підкаталогів зазначеного каталогу |
GetFileSystemІnfos |
GetFileSystemEntries |
Переміщення каталогу |
MoveTo |
Move |
Перевірка на існування |
Exists |
Exists |
Отримання імені каталогу |
Name |
Нет |
Отримання імені батьківського каталогу |
Parent |
GetParent |
Отримання імені кореневого Каталогу |
Root |
GetDirectoryRoot |
Отримання імені поточного каталогу |
Немає |
GetCurrentDirectory |
Отримання списку файлів і підкаталогів зазначеного каталогу
З усього списку методів для роботи з папками одними з найкорисніших є методи, які повертають список файлів і підкаталогів даної папки. При цьому при отриманні списку файлів, підкаталогів можна застосовувати шаблон імені файлу або папки, використовуючи типові позначення:
* - множинна підміна;
? - Підміна одного символу.
Це дозволяє знайти і відобразити не весь вміст папки, а лише якісь певні файли або підкаталоги.
Метод GetFiles класу Directory має наступний синтаксис:
Function GetFiles (ByVal path As String, ByVal searchPattern As String) As String ()
де:
path - повне ім'я папки. За замовчуванням застосовуються поточна папка і пристрій. Якщо папка не знайдена, то повертається порожній рядок;
searchPattern - задає шаблон, за яким повинен проводитися пошук файлів. Якщо цей параметр не заданий, результат пошуку буде містити всі файли, розташовані в каталозі.
Методи GetDirectories і GetFileSystemEntries класу Directory мають синтаксис, аналогічний методу GetFiles.
Подібні методи існують і в класі Directoryinfo. Вони мають наступний синтаксис:
Function GetFiles (ByVal searchPattern As String) As Filelnfo()
Function GetDirectories (ByVal searchPattern As String) As Directoryinfo()
Function GetFileSystemlnfos (ByVal searchPattern As String) As FileSystemlnfo()
Розглянемо приклад, який дозволяє отримати список імен всіх файлів і підкаталогів зазначеної папки. Для цього створимо консольний додаток і додамо в нього наступний код:
Sub Main()
Dim dirName As String = "d:\"
dirlnfo(dirName)
End Sub
Sub dirlnfo(ByVal dirName As String)
If Directory.Exists(dirName) Then
Dim files() As FileSystemInfo
Dim dirlnfo As New DirectoryInfo(dirName)
files = dirlnfo.GetFileSystemInfos()
Dim i As Long
For i = 0 To files.GetUpperBound(0)
Console.WriteLine(files(i))
Next
Console.ReadLine()
End If
End Sub
Отримання інформації про каталог
Використовуючи властивості і методи класів Directory і Directoryinfo, можна дізнатися ім'я кореневого каталогу, ім'я батьківського каталогу, дати створення, зміни і останнього доступу, а також ім'я зазначеного каталогу. Розглянемо ці методи і властивості на прикладі. Для цього додайте наступний код у додаток:
Sub Main()
Dim dirName As String = "C:\book\chapter"
Dim dir As New DirectoryInfo(dirName)
Console.WriteLine("Имя каталога: {0}", dir.FullName)
Console.WriteLine("Имя родительского каталога: {0}", dir.Parent)
Console.WriteLine("Имя корневого каталога: {0}", dir.Root)
Console.WriteLine("Дата создания каталога: {0}", dir.CreationTime)
Console.ReadLine()
End Sub
Якщо папка знаходиться на пристрої, то рядок, що містить ім'я батьківського каталогу, буде порожнім.
Видалення каталогу
Для видалення папок призначений метод Delete класів Directory і Directorylnfo. Вони мають наступний синтаксис:
Sub Delete (ByVal path As String, ByVal recursive As Boolean)
Sub Delete (ByVal recursive As Boolean)
де path - повне ім'я папки. За замовчуванням застосовуються поточна папка і пристрій; recursive - параметр, що управляє процесом видалення. Якщо значення параметра приймає значення True, то каталог видаляється разом зі своїми підкаталогами і файлами. Якщо цей параметр не вказаний, то знищується тільки порожня папка.
Створимо додаток, який видаляє каталог разом з усім вмістом. Код програми буде мати наступний вигляд:
Sub Main()
Dim dirName As String = "C:\MyDir"
Try
Directory.Delete(dirName, True)
Catch e As Exception
Console.WriteLine("Ошибка при удалении: {0}", e.ToString)
Console.ReadLine()
End Try
End Sub
Оператори Try і catch дозволяють відловити помилки, які можуть виникнути при видаленні каталогу.
Переміщення каталогу
Часто потрібно перемістити папку разом з її вмістом з одного місця у інше. Для цього можна скористатися методами Move класу Directory і MoveTo класу Directoryinfo. Вони мають наступний синтаксис:
Sub Move (ByVal sourceDirName As String, ByVal destDirName As String)
Sub MoveTo (ByVal destDirName As String)
де sourceDirName - повне ім'я папки, яку збираємося переміщати. За замовчуванням застосовуються поточна папка і пристрій; destFiieName - нове ім'я папки і повний шлях до неї.
Ці методи можна використовувати також для перейменування каталогу. Для цього у параметрі destDirName вкажіть шлях до даного каталогу, а замість старого імені введіть нове. Нижче наведена програма, що дозволяє перейменовувати каталог:
Sub Main()
Dim oldName As String = "C:\MyDir\book"
Dim newName As String = "C:\MyDir\magazine"
Dim dir As New DirectoryInfo(oldName)
If dir.Exists() Then
dir.MoveTo(newName)
End If
End Sub
Створення каталогу
Для створення папки застосовується метод CreateDirectory класу Directory і метод Create класу Directoryinfo:
Function CreateDirectory (ByVal path As String) As Directoryinfo
Sub Create ()
де path - повне ім'я папки. Якщо цей параметр не містить ім'я пристрою, папка буде створена на поточному пристрої.
Крім методу для створення папки, клас Directoryinfo містить метод, що дозволяє формувати один або декілька підкаталогів зазначеної папки. Це метод CreateSubdirectory:
Function CreateSubdirectory (ByVal path As String) As Directoryinfo
де path - ім'я створюваної папки. Ім'я може мати наступний вигляд: "MyDirl \ MyDir2 \ MyDir3". При цьому створяться три папки. Імена, такі як "С:\" і "C:\MyDir", використовувати не можна.
Напишемо програму, яка створює три папки, розташовані одна в іншій.
Sub Main()
Dim parentDirName As String = "C:\book"
Dim directoriesName As String = "part\chapter"
Dim dir As New DirectoryInfo(parentDirName)
If Not dir.Exists() Then
dir.Create()
dir.CreateSubdirectory(directoriesName)
End If
End Sub
Дана програма створює в першу чергу основний каталог, якщо він до цього не існував, а потім всередині нього спочатку один підкаталог, а потім всередині цього підкаталогу ще один.
Робота зі шляхами до файлів
При роботі з файлами і каталогами постійно доводиться мати справу з шляхами. При створенні, видаленні, переміщенні файлів обов'язково вказується шлях до файлу, якщо тільки він не розташований в поточній папці. Для роботи з шляхами призначені статичні поля і методи класу Path простору System.IO.
Методи класу Path
Повертає рядок, в якому зазначено повне ім'я файлу з зміненим розширенням
Function ChangeExtension (ByVal path As String, ByVal extension As String) As String
Об'єднує два шляхи. У разі, якщо другий шлях виявиться повним, то повертається тільки він
Function Combine (ByVal pathl As String, ByVal path2 As String) As String
Повертає ім'я каталогу або пристрою, в якому перебуває даний файл або каталог
Function GetDirectoryName (ByVal path As String) As String
Повертає розширення зазначеного файлу
Function GetExtension (ByVal path As String) As String
Повертає ім'я файлу з розширенням
Function GetFileName (ByVal path As String) As String
Повертає ім'я файлу без розширення
Function GetFileNameWithoutExtension (ByVal path As String) As String
Повертає повне ім'я файлу або каталогу
Function GetFullPath (ByVal path As String) As String
Повертає кореневий каталог зазначеного файлу або каталогу
Function GetPathRoot (ByVal path As String) As String
Повертає ім'я тимчасового файлу і створює з цим ім'ям порожній файл
GetTempFileName () As String
Повертає рядок, в якій вказано шлях до системної тимчасової папки
GetTempPath () As String
Перевіряє, чи містить вказаний шлях розширення файлу
Function HasExtension (ByVal path As String) As Boolean
Перевіряє, чи є зазначений шлях повним ім'ям файлу або папки
Function IsPathRooted (ByVal path As String) As Boolean
Наведений нижче приклад показує, як можна використовувати методи класу Path. Ми створюємо тимчасовий файл і записуємо в нього рядок. При цьому на екран виводимо ім'я файлу, його розширення і розташування. Для цього створіть консольний додаток і додайте в нього наступний код:
Sub Main()
Dim fileName As String = Path.GetTempFileName()
Dim filelnfo As New FileInfo(fileName)
Console.WriteLine("Создан файл {0} с расширением {1}", Path.GetFileNameWithoutExtension(fileName), Path.GetExtension(fileName))
Console.WriteLine("Файл находится в папке: {0}", Path.GetTempPath())
Console.ReadLine()
Dim f As New FileStream(fileName, FileMode.Open.Open)
Dim s As New StreamWriter(f)
s.WriteLine("Печать в файл")
s.Close()
f.Close()
filelnfo.Refresh()
End Sub