Старый доступ к файлам

Последнее обновление: 30.10.2015

Кроме классов из пространства имен System.IO Visual Basic.NET также имеет ряд унаследованных от классического Visual Basica методов для работы с файлами. Рассмотрим эти методы на примере:

Module Module1

    Sub Main()

		' создаем массив структур State
        Dim states As State() = New State(2) {}
        states(0) = New State("Германия", "Берлин", 357021, 80.2)
        states(1) = New State("Франция", "Париж", 674685, 63.4)
        states(2) = New State("Италия", "Рим", 309547, 61.5)

        Dim path As String = "C:\SomeDir\states2.dat"

		' открываем файл
        FileOpen(1, path, OpenMode.Random)

        'запись всех объектов в файл
        For i As Integer = 0 To states.Length - 1
            FilePut(1, states(i))
        Next
		' закрываем файл
        FileClose(1)

        Dim states2 As State() = New State(2) {}
        FileOpen(1, path, OpenMode.Random)

		' чтение всех структур из файлов в новый массив
        For i As Integer = 0 To states2.Length - 1
            FileGet(1, states2(i))
            Console.WriteLine("Название: {0}   Столица: {1}  Площадь: {2}   Население: {3}",
                              states2(i).name, states2(i).capital, states2(i).area, states2(i).population)
        Next
		
        ' изменим вторую запись в файле
        FilePut(1, New State("Испания", "Мадрид", 290000, 30.7), 2)
		
        Dim secondState As State
        'получим вторую структуру из файла
        FileGet(1, secondState, 2)
        Console.WriteLine("Название: {0}   Столица: {1}  Площадь: {2}   Население: {3}",
                              secondState.name, secondState.capital, secondState.area, secondState.population)

        FileClose(1)

        Console.ReadLine()
    End Sub

    Structure State

        Public name As String
        Public capital As String
        Public area As Integer
        Public population As Double

        Sub New(name As String, capital As String, area As Integer, population As Double)
            Me.name = name
            Me.capital = capital
            Me.area = area
            Me.population = population
        End Sub
    End Structure

End Module

Во-первых, для работы с файлами нам надо открыть нужный файл с помощью метода FileOpen. Он принимает ряд параметров. Первый параметр - произвольный идентификатор, который мы связываем с файлом для последующей работы с ним. Второй параметр указывает на путь к файлу. И третий параметр опеределяет доступ к файлу. В данном случае используется произвольный доступ OpenMode.Random, позволяющий как чтение, так и запись в файл. Кроме этого типа доступа есть еще несколько режимов:

  • OpenMode.Binary: открыть файл для нетипизированного доступа

  • OpenMode.Input: открыть файл для чтения

  • OpenMode.Output: открыть файл для записи

  • OpenMode.Append: открыть файл для дозаписи

После открытия файла мы можем читать его и записывать. Для записи применяется метод FilePut, который имеет несколько версий. В первой версии FilePut(1, states(i)) в качестве первого параметра идет идентификатор открытого файла, а вторым записываемое значение. При этом все передаваемые в цикле значения дозаписываются в конец файла. Таким образом, мы можем записать все структуры State.

Вторая форма метода позволяет заменить определенную запись в файле. Например, заменим вторую запись (индексация начинается с 1): FilePut(1, New State("Испания", "Мадрид", 290000, 30.7), 2)

Чтение можно произвести с помощью метода FileGet: FileGet(1, states2(i)). Первым параметром также идет идентификатор файла, а вторым - переменная, в которую производится чтение. Вторая форма метода производит чтение по определенному индексу: FileGet(1, secondState, 2) - чтение второй записи в переменную secondState.

После работы с файлом нам надо его закрыть методом FieClose, в который передается идентификатор файла.

Однако этот способ работы с файлами имеет ограничения. Так, он может записывать и считывать только данные типов значений, например, структур. В то же время если бы тип State был классом, а не структурой, то мы не смогли бы его использовать.

В предыдущем примере все довольно ясно с записью. Однако при чтении мы можем столкнуться с проблемой, что мы точно не знаем количество записей в файле. Для этого мы можем применить метод EOF, который возвращает true, если достигнут конец файла:

Dim path As String = "C:\SomeDir\states2.dat"

FileOpen(1, path, OpenMode.Random)

Dim length As Long = LOF(1) ' вычисляем длину файла
Console.WriteLine("Размер файла: {0} байт", length)

Dim countries As New List(Of State)()
Dim tempState As State
While Not EOF(1)
    FileGet(1, tempState)
    countries.Add(tempState)
End While

For i As Integer = 0 To countries.Count - 1
    Console.WriteLine("Название: {0}   Столица: {1}  Площадь: {2}   Население: {3}",
                    countries(i).name, countries(i).capital, countries(i).area, countries(i).population)
Next

FileClose(1)
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850