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




Нетипизированные файлы - часть 4


        Dim BR As New BinaryReader(FS)

        Dim By As Byte

        FS.Seek(4, SeekOrigin.Begin)       : By = BR.ReadByte      : Debug.WriteLine(By)       : Debug.WriteLine(Chr(By))

        FS.Seek(2, SeekOrigin.Begin)       : By = BR.ReadByte      : Debug.WriteLine(By)       : Debug.WriteLine(Chr(By))

        BR.Close()

        FS.Close()

End Sub

Пусть файл создан и записан предыдущей процедурой (вот цепочка байтов: {190, 47, 35, 205, 219}). Тогда данная процедура распечатает вот что:

219

Ы

35

#

Пояснения: Второй параметр конструктора объекта FS указывает, что этот файл можно только открывать (Open). На основе объекта FS создается объект BR класса BinaryReader для чтения из файла. Далее мы объявляем переменную By типа Byte, в которую и будем считывать байты.

Затем работает метод Seek

класса FileStream. Он ставит считывающую головку на 4?й байт, если отсчитывать байты с начала файла, начиная с 0. То, что отсчитывать нужно именно с начала файла, указывает элемент Begin перечисления SeekOrigin.

Раз считывающая головка стоит на нужном байте, его можно прочесть. Делает это метод ReadByte класса BinaryReader. Считанный байт присваивается переменной By. Поскольку эта переменная имеет числовой тип Byte, следующий оператор распечатывает считанный байт как число. Следующий оператор распечатывает этот же байт, но уже в «маске» символа ASCII.

То же самое делает следующая четверка операторов, но уже не с 4-м, а со 2-м байтом файла.

После считывания оба объекта закрываются.

Записываем в нетипизированный файл отдельный байт. Пусть байты в файле пронумерованы с 0. Тогда вот процедура для записи во 2-й байт числа 39:

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

        Dim FS As New FileStream("E:\Папка\Файл.txt", FileMode.OpenOrCreate)

        Dim BW As New BinaryWriter(FS)

        Dim By As Byte = 39

        FS.Seek(2, SeekOrigin.Begin)

        BW.Write(By)

        BW.Close()

        FS.Close()

End Sub




Содержание  Назад  Вперед