ПОНЯТНО О Visual Basic NET (том 3)

Создание, копирование, перенос, удаление файлов и папок


 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.


Содержание раздела