Классе File
Класс File, как и класс Directory, состоит из общих методов, которым при вызове обычно передается
имя файла. Эти методы применяктея при копировании, удалении и перемещении файлов. Основные методы класса File перечислены в табл. 9.3. Обратите внимание,— все параметры передаются по значению (в таблице отсутствуют методы класса File, предназначенные для работы с потоками данных, — они будут рассмотрены ниже).
Таблица
9.3. Основные методы класса File
Метод |
Описание |
||
Copy(ByVal sourceFiteName
As String,ByVal destFileName As String) |
Копирует файл.
Существует перегруженная версия метода с третьим логическим параметром
overwrite; если этот параметр равен True, существующий файл с заданным
именем перезаписывается |
||
Delete(ByVal
path As String) |
Удаляет заданный
файл. Интересная подробность: если файл не существует, исключение
не инициируется (см. описание метода Exists) |
||
Exists(ByVal
path As String) |
Возвращает логическую
величину, которая показывает, существует ли файл с заданным полным
именем |
||
GetAttributes(ByVal
path As String) |
Возвращает значение
перечисляемого типа FileAttributes с описанием атрибутов файла — архивный,
системный и т. д. (о том, как использовать полученный объект, рассказано
в следующем разделе) |
||
GetCreationTime
(ByVal path As String) |
Возвращает объект
даты, содержащий информацию о времени создания файла |
||
GetLastAccessTime
(ByVal path As String) |
Возвращает объект
даты, содержащий информацию о времени последнего обращения к файлу |
||
GetLastWriteTime
(ByVal path As String) |
Возвращает объект
даты, содержащий информацию о времени последней записи в файл |
||
Move(ByVal sourceFileName
As String, ByVal destFileName As String) |
Перемещает файл
(поддерживается возможность перемещения на другой диск) и переименовывает
его, если в параметре destFileName указано новое имя |
||
SetAttributes(ByVal
path As String, ByVal fileAttributes As FileAttributes) |
Задает атрибуты
указанного файла |
||
Операции с атрибутами файлов и каталогов выполняются достаточно часто, поэтому в .NET Framework был включен удобный класс FileAttri bute. Вероятно, правильнее было бы назвать его FileDi rectoryAttri bute, поскольку все атрибуты относятся не только к файлам, но и к каталогам.
Значения перечисляемого типа обычно объединяются поразрядными операциями, чтобы избежать всевозможных ошибок в программе. Не используйте команды следующего вида:
If File.GetAttributes("c:\foo.txt") = FileAttributes.Readonly Then...
В проверяемом условии не учитывается тот факт, что у файла могут быть установлены и другие атрибуты. Правильная команда должна выглядеть так:
If File.GetAttributes("c:\foo.txt") And FileAttributes.Readonly _ = FileAttributes.Readonly Then...
При необходимости атрибуты объединяются оператором Оr. Пример:
File.SetAttributes( "с: \foo.txt".
Not (FileAttributes.Archive) Or FileAttributes.Hidden)
Команда назначает атрибуты C:\foo.txt таким образом, что файл становится скрытым (Hidden), а архивный бит (Archive) сбрасывается. Ниже перечислены важнейшие значения этого перечисляемого типа:
Archive
Compressed
Di rectory
Encrypted
Hidden
Normal (атрибуты не установлены)
Readonly
System
Классы
DirectoryInfo и FileInfo
Как правило, при создании экземпляров этих классов при вызове конструктора указывается имя каталога или файла. Пример:
Dim myDirectory As Directorylnfo
myDirectory = New Directorylnfo("C:\Test Directory")
Текущий каталог обозначается символом «.»:
Dim currentDir As New Directorylnfo(".")
После создания объекта Directorylnfo можно запросить различные сведения о соответствующем каталоге — например, время создания:
MsgBox(myDirectory.GreatienTime)
Как упоминалось выше, одна из самых замечательных особенностей этих классов заключается в том, что их члены возвращают объекты, а не строки. Например, в следующей программе вызов GetFiles в выделенной строке возвращает коллекцию объектов Filelnfo, что позволяет при необходимости вызвать методы этих объектов.
Imports System.IO
Module Modulel Sub Main()
Dim myDi rectory As Directorylnfo Try
myDirectory =New DirectoryInfo("C:\Test Directory")
Dim aFile As File Info
For Each aFile In myDirectory.GetFiles
Consol e. WriteLi ne( "The fi1e named " & aFile. Full Name & _ "has length " & aFile.Length) Next Catch e As Exception
MsgBox("eeks -an exception " & e.StackTrace) Finally
Console.WriteLine("Press enter to end") Console.ReadLine() End Try End Sub End Module
Рекурсивный
просмотр дерева каталогов
Option Strict On Imports System.IO Module Modulel
SubMain()
Dim nameOfDirectory As String ="C:\" Dim myDirectory As DirectoryInfo myDirectory = New DirectoryInfo(nameOfDirectory) WorkWithDirectory(myDirectory) End Sub
Public Sub WorkWithDirectory(ByVal aDir As Directorylnfo) Dim nextDir As Directorylnfo WorkWithFilesInDir(aDir) For Each nextDir In aDir.GetDirectories
WorkWithDirectory(nextDir) Next End Sub
Public Sub WbrkWithFilesInDir(ByVal aDir As Directorylnfo) Dim aFile As Filelnfo For Each aFile In aDir.GetFiles() ' Выполнить операцию с файлом. ' В нашем примере просто выводится уточненное имя. Consolе.WriteLine(aFi1e.Ful1 Name) Next End Sub End Module
Следующий, более реалистичный пример активизирует форму, показанную на рис. 9.1. Программа заносит все скрытые файлы заданного каталога в список и продолжает рекурсивную обработку дерева каталогов. Курсор мыши заменяется изображением песочных часов; по этому признаку пользователь узнает о том, что программа выполняет какую-то длительную операцию.
Private Sub Buttonl_Click(ByVal sender As System.Object,_ ByVal e As System.EventArgs) Handles Buttonl.Click 'Заменить курсор изображением песочных часов Me.Cursor = Cursors.WaitCursor ListBoxl. Items. Clear()
WorkWithDirectory(New Directorylnfo(TextBoxl.Text)) Me.Cursor = Cursors.Default End Sub
Public Sub WorkWithDirectory(ByVal aDir As Directorylnfo) Dim nextDir As Directorylnfo Try
WorkWithFilesInDir(aDir)
For Each nextDir In aDir.GetDirectories
WorkWithDirectory(nextDi r) Next Catch e As Exception
MsgBox(e.message SvbCrLf Se.StackTrace) End Try End Sub
Public Sub WorkWithFilesInDir(ByVal aDir As Directorylnfo) Dim aFile As Filelnfo For Each aFile In aDir.GetFiles() If aFile.Attributes And _
FileAttributes.Hidden = FileAttributes.Hidden Then ListBoxl. Items. Add( "FOUND hidden filenamed " & aFile. FullName) End If Next End Sub
Рис.
9.1. Форма для рекурсивного просмотра каталогов
Назад | Начало | Вперед |