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