Создание, копирование, перенос, удаление файлов и папок
VB может выполнять над файлами и папками те же действия, что вы вручную выполняете в Проводнике Windows, а именно: создание, копирование, перемещение и уничтожение папок и файлов. Для работы с файлами удобно применять класс File пространства имен System.IO. Аналогично для работы с папками применяем класс Directory пространства имен System.IO.
Пусть у вас на диске c: в папке temp расположены рядом папки 222, 333, 666, 999 и файлы 1.txt и 2.txt.
Действия с файлами. Создать текстовый файл можно, просто создав объект StreamWriter, как мы это делали раньше:
Dim Запись As New System.IO.StreamWriter("E:\VB\Filimon.txt")
Только надо не забыть потом его закрыть.
Для других действий применяем методы класса File:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Скопировать файл 1.txt из папки temp диска c: в папку 222 папки temp диска c:
File.Copy("c:\temp\1.txt", "c:\temp\222\1.txt")
'Сделать то же с правом затирания файла 1.txt , если он уже существует в папке 222:
File.Copy("c:\temp\1.txt", "c:\temp\222\1.txt", True)
'Скопировать файл 1.txt под именем 3.txt из папки temp диска c: в папку 222 папки temp диска c:
File.Copy("c:\temp\1.txt", "c:\temp\222\3.txt")
'Скопировать файл 1.txt под именем 4.txt из папки temp диска c: в ту же папку:
File.Copy("c:\temp\1.txt", "c:\temp\4.txt", True)
'Переместить файл 1.txt из папки temp диска c: в папку 333 папки temp диска c:
File.Move("c:\temp\1.txt", "c:\temp\333\1.txt")
'Переместить файл 3.txt под именем 5.txt из папки 222 папки temp диска c: в папку temp диска c:
File.Move("c:\temp\222\3.txt", "c:\temp\5.txt")
'Переименовать файл 4.txt папки temp диска c: в 6.txt:
File.Move("c:\temp\4.txt", "c:\temp\6.txt")
'Уничтожить файл 5.txt папки temp диска c:
File.Delete("c:\temp\5.txt")
'Если существует файл 6.txt папки temp диска c:, то .....
If File.Exists("c:\temp\6.txt") Then Debug.WriteLine("Файл существует") _
Else Debug.WriteLine("Файл не существует")
End Sub
Работаем с информацией о файлах.
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'Сделать файл 6.txt папки temp диска c: спрятанным (Hidden):
File.SetAttributes("c:\temp\6.txt", FileAttributes.Hidden)
'Распечатать атрибуты файла 6.txt папки temp диска c:
Debug.WriteLine(File.GetAttributes("c:\temp\6.txt"))
'Распечатать время создания файла 6.txt папки temp диска c:
Debug.WriteLine(File.GetCreationTime("c:\temp\6.txt"))
'Распечатать время последнего доступа к файлу 6.txt папки temp диска c:
Debug.WriteLine(File.GetLastAccessTime("c:\temp\6.txt"))
' Принудительно задать время последней записи в файл 6.txt папки temp диска c:
File.SetLastWriteTime("c:\temp\6.txt", #11/21/2004 10:42:00 PM#)
'Распечатать время последней записи в файл 6.txt папки temp диска c:
Debug.WriteLine(File.GetLastWriteTime("c:\temp\6.txt"))
End Sub
Пояснения: При помощи метода SetAttributes
мы задаем атрибуты файла (спрятанный, только для чтения и др…), а при помощи метода GetAttributes мы их узнаем.
Действия с папками. Применяем методы класса Directory:
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
'Создать в папке temp диска c: пустую папку 444:
Directory.CreateDirectory("c:\temp\444")
'Уничтожить в папке temp диска c: папку 444, если только она пустая:
Directory.Delete("c:\temp\444")
' Если существует папка 222 папки temp диска c:, то .....
If Directory.Exists("c:\temp\222") Then Debug.WriteLine("Папка существует") _
Else Debug.WriteLine("Папка не существует")
'Переместить папку 666 из папки temp диска c: в папку 222 папки temp диска c:
Directory.Move("c:\temp\666", "c:\temp\222\666")
'Переместить папку 666 под именем 777 из папки 222 папки temp диска c: в папку temp диска c:
Directory.Move("c:\temp\222\666", "c:\temp\777")
'Переименовать папку 777 в 555:
Directory.Move("c:\temp\777", "c:\temp\555")
End Sub
Пояснения: При выполнении метода Move папка перемещается вместе со всем своим содержимым. Копирование папок не поддерживается. Чтобы скопировать папку вместе с содержимым, рекомендую создать папку с тем же именем в требуемом месте, затем скопировать в нее все файлы.
Работаем с информацией о папках.
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
'Принудительно задать время последнего обращения к папке 333 папки temp диска c:
Directory.SetLastAccessTime("c:\temp\333", #3/28/2003 10:22:00 AM#)
'Распечатать время последнего доступа к папке 333 папки temp диска c:
Debug.WriteLine(Directory.GetLastAccessTime("c:\temp\333"))
'Распечатать время создания папки 333:
Debug.WriteLine(Directory.GetCreationTime("c:\temp\333"))
'Распечатать время последней записи в папку 333 папки temp диска c:
Debug.WriteLine(Directory.GetLastWriteTime("c:\temp"))
'Распечатать, в какую папку входит папка 333:
Debug.WriteLine(Directory.GetParent("c:\temp\333"))
End Sub
Текущая папка.
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
'Распечатать текущий рабочий каталог (текущую рабочую папку):
Debug.WriteLine(Directory.GetCurrentDirectory)
' Назначить текущей папкой папку 999 папки temp диска c:
Environment.CurrentDirectory
= "c:\temp\999"
'Скопировать файл внутри текущей папки 999:
File.Copy("44.txt", "55.txt")
End Sub
Пояснения: В программировании широко используется понятие текущей папки. Любая папка по воле компьютера или по вашему желанию может стать текущей. Но в каждый момент времени текущая папка может быть только одна. Назначьте текущей папкой папку, с файлами которой вы в данный момент много работаете, и запись адресов файлов и папок в операторах существенно сократится: вам достаточно будет писать вместо полного адреса только имя файла или папки.
Для назначения текущей папки пользуемся свойством CurrentDirectory класса Environment пространства имен System.
При работе проекта, если текущая папка не переназначалась, текущей папкой служит папка BIN в папке работающего проекта.
Определение содержимого папок:
'Определяем, какие папки находятся внутри папки temp диска c:
Dim Папки() As String = Directory.GetDirectories("c:\temp")
Dim Папка As String
For Each Папка In Папки
Debug.WriteLine(Папка)
Next
'Определяем, какие файлы находятся внутри папки temp диска c:
Dim Файлы() As String = Directory.GetFiles("c:\temp")
Dim Файл As String
For Each Файл In Файлы
Debug.WriteLine(Файл)
Next
'Определяем, какие логические диски имеются на нашем компьютере:
Dim Диски() As String = Directory.GetLogicalDrives
Dim Диск As String
For Each Диск In Диски
Debug.WriteLine(Диск)
Next
Пояснения: Все три метода, приведенные здесь, имеют своим результатом строковый массив. У метода GetDirectories каждая строка в массиве – это имя папки, у метода GetFiles каждая строка в массиве – это имя файла, у метода GetLogicalDrives – это название логического диска. Распечатываем мы эти массивы, пробегая по ним оператором For Each.