Запись в файл
Приведенный ниже фрагмент создает файл, показанный на рис. 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

Рис. 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 и прочитайте весь файл в байтовый массив нужного размера. Такая операция выполняется значительно быстрее.
