Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_11-12.docx
Скачиваний:
4
Добавлен:
06.11.2018
Размер:
81.92 Кб
Скачать

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]