Работа с текстовыми файлами

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

Непосредственно для работы с текстовыми файлами в пространстве System.IO предназначены специальные классы StreamReader и StreamWriter.

Чтение из файла и StreamReader

Класс StreamReader позволяет читать из текстового файла весь текст или отдельные строки. Рассмотрим основные его методы:

  • Метод Close закрывает файл и освобождает поток

  • Метод Peek возвращает следующий доступный символ, если символов больше нет, то возвращает -1

  • Метод Read считывает и возвращает следующий символ в численном представлении. Имеет перегруженную версию: Read(array As Char(), index As Integer, count As Integer), где array - массив, куда считываются символы, index - индекс в массиве array, начиная с которого записываются считываемые символы, и count - максимальное количество считываемых символов

  • Метод ReadLine считывает одну строку из файла

  • Метод ReadToEnd считывает из файла весь текст

Считаем текст из файла различными способами:

Imports System.IO

Module Module1

    Sub Main()

        Dim path As String = "C:\SomeDir\note.txt"

        Try
            Console.WriteLine("******считываем весь файл********")
            Using reader As New StreamReader(path)
                Console.WriteLine(reader.ReadToEnd())
            End Using
            Console.WriteLine()

            Console.WriteLine("******считываем построчно********")
            Using reader As New StreamReader(path, System.Text.Encoding.UTF8)
                Dim line As String = reader.ReadLine()
                While (line IsNot Nothing)
                    Console.WriteLine(line)
                    line = reader.ReadLine()
                End While
            End Using
            Console.WriteLine()

            Console.WriteLine("******считываем блоками********")
            Using reader As New StreamReader(path, System.Text.Encoding.UTF8)
                Dim archars As Char() = New Char(4) {}
                'считываем 4 символа
                reader.Read(archars, 0, 4)

                Console.WriteLine(archars)
            End Using
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try

        Console.ReadLine()
    End Sub

End Module

Как и в случае с классом FileStream здесь используется конструкция Using.

В первом случае мы разом считываем весь текст с помощью метода ReadToEnd().

Во втором случае в цикле While считываем построчно. Когда объект reader дойдет до конца файла и больше строк не останется, то метод reade.ReadLine() вернет значение Nothing.

В третьем случае считываем в массив четыре символа.

Обратите внимание, что в последних двух случаях в конструкторе StreamReader указывалась кодировка System.Text.Encoding.UTF8. Если нам известна кодировка файла, то мы можем ее указать при чтении файла. Также через другие свойства мы можем указать другие кодировки. Если кодировка не указана, то по умолчанию при чтении используется UTF8. Иногда важно указывать кодировку, так как она может отличаться от UTF8, и тогда мы получим некорректный вывод.

Запись в файл и StreamWriter

Для записи в текстовый файл применяется класс StreamWriter. Его основные методы:

  • Close: закрывает записываемый файл и освобождает все ресурсы

  • Flush: записывает в файл оставшиеся в буфере данные и очищает буфер.

  • Write: записывает в файл данные простейших типов, как Integer, Double и т.д.

  • WriteLine: записывает в файл строку

Посмотрим на использование класса StreamWriter на примере:

Imports System.IO

Module Module1

    Sub Main()

        Dim readPath As String = "C:\SomeDir\note.txt"
        Dim writePath As String = "C:\SomeDir\note2.txt"
        Dim text As String
        Try

            Using reader As New StreamReader(readPath)
                text = reader.ReadToEnd()
            End Using


            Using writer As New StreamWriter(writePath, False, System.Text.Encoding.UTF8)
                writer.WriteLine(text)
            End Using
            
            Using writer As New StreamWriter(writePath, True, System.Text.Encoding.UTF8)
                writer.WriteLine("Дозапись")
                writer.Write(4.5)
            End Using

        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try

        Console.ReadLine()
    End Sub

End Module

Вначале весь текст из файла считывается в переменную text, а затем содержание этой переменной с помощью объекта StreamWriter записывается в другой файл.

Класс StreamWriter имеет несколько конструкторов. Здесь мы использовали два из них: New StreamWriter(writePath, False). В качестве первого параметра передается путь к записываемому файлу. Второй параметр представляет булевую переменную, которая определяет, будет файл дозаписываться или перезаписываться. Если этот параметр равен True, то новые данные добавляются в конце к уже имеющимся данным. Если False, то предыдущее содержимое стирается, и файл перезаписывается. И если в первом случае файл перезаписывается, то во втором делается дозапись в конец файла.

Третий параметр указывает кодировку, в которой записывается файл.

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