Иллюстрированный самоучитель по Visual Basic .NET

Запись в файл

Приведенный ниже фрагмент создает файл, показанный на рис. 9.2:

Option Strict On Imports System.IO
Module Modulel
Sub Main()
Dim i As Integer
Dim theBytes(255) As Byte
For i = 0 To 255
theBytes(i) = CByte(i)
Next
Dim myFileStream As FileStream
Try
myFileStream = New FileStream("C:\foo",
Fi1eMode.OpenOrCreate. FileAccess.Write)
myFlleStream.Write(theBytes, 0. 256) Finally
If Not (myFileStream Is Nothing) Then
myFileStream.Close()
End Try
DisplayAFile("C:\foo")
End Sub
End Module

Иллюстрированный самоучитель по Visual Basic .NET › Ввод-вывод › Запись в файл
Рис. 9.2. Запись двоичных данных в файл

После выполнения этого фрагмента записанные данные можно прочитать методом Read, а также воспользоваться методом Seek для перехода к произвольной позиции в файле. Впрочем, как это всегда бывает при работе с неструктурированными потоками байтов, вам придется самостоятельно преобразовать двоичные данные в более полезный формат.

В результате сейчас трудно найти более содержательный пример, чем простой вывод записанных чисел процедурой, приведенной ниже:

Sub ReadDataBack()
Dim myFileStream As Stream.i As Integer Try
myFileStream = New FileStream("C:\foo",
FileMode.Open. FileAccess.Read)
For i = 0 To 255
Console.Write(myFileStream.ReadByte) Next
Catch e As Exception MsgBox(e.Message)
Finally
If Not (myFileStream Is Nothing) Then
myFileStream.Close()
End Try
End Sub

Метод Length базового класса Stream всегда позволяет прочитать нужное количество байтов в цикле независимо от структуры файла. Например, следующая процедура читает файл по одному байту. Обнаруженные исключения просто передаются вызывающей стороне; вероятно, в реальной программе следовало бы определить новый класс исключения:

Sub DisplayAFile(ByVal theFileName As String)
Dim theFile As FileStream
Dim i As Long Try
theFile = New FileStream(theFileName.
Fi1eMode.Open,Fi1eAccess.Read)
For i = 0 To (theFile.Length -1)
' Вычесть 1. поскольку отсчет начинается с 0
Consolе.Write(theFiIe.ReadByte) Next
Catch Throw Finally
If Not (theFile Is Nothing) Then theFile.Close()
End Try
End Sub

Примечание
Если файл имеет небольшие размеры и легко помещается в памяти, воспользуйтесь одним вызовом Read и прочитайте весь файл в байтовый массив нужного размера. Такая операция выполняется значительно быстрее
.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.