Запись в файл
Другой распространенный вариант посимвольного чтения основан на том, что метод ReadByte в конце потока возвращает -1. Основной цикл выглядит примерно так:
Dim i As Integer i = theFile.ReadByte Do Until i =-1 Console.Write(i) i = theFile.ReadByte Loop
Чтение/запись файла на уровне отдельных байтов используется не так уж часто; в основном это необходимо при выполнении низкоуровневых операций. При операциях более высокого уровня часто используется стандартный прием – неструктурированный файловый поток передается конструктору потока, обладающего более широкими возможностями. Этот принцип называется многоуровневой организацией потоков. Например, неструктурированный файловый поток можно передать потоку, автоматически распознающему текст.
Разные способы многоуровневой организации потоков описаны в нескольких ближайших разделах. Но прежде, чем переходить к этим разделам, просмотрите табл. 9.10 – в ней перечислены основные методы и свойства базового класса FileStream. В дальнейшем мы будем использовать эти методы, хотя базовый файловый поток будет скрыт потоками более высоких уровней.
Таблица 9.10. Основные члены класса RleStream.
Метод/свойство | Описание |
---|---|
Handle (свойство) | Файловый манипулятор операционной системы для файла, инкапсулированного в объекте FileStream. Свойство доступно для чтения |
Length (свойство) | Размер потока в байтах. Свойство доступно для чтения |
Name (свойство) | Уточненное имя, переданное конструктору FileStream |
Position (свойство) | Текущая позиция для операций чтения или записи в потоке (нумерация позиций начинается с нуля). Свойство доступно для чтения и записи |
Close | Закрывает поток и освобождает все связанные с ним ресурсы |
Flush | Пересылает все данные из буфера в устройство. Автоматически вызывается при вызове Close |
Lock(ByVal position As Long, ByVal length As Long) | Блокирует доступ ко всему файлу или его части со стороны других процессов (нумерация позиций начинается с нуля) |
Read(ByVal array() As Byte, ByVal offset As Integer, ByVal count As Integer) | Читает заданное количество байтов в массив из файлового потока начиная с заданной позиции |
ReadByte | Читает один байт из файла и перемещает указатель текущей позиции на один байт вперед |
Seek(ByVal offset As Long, ByVal origin As SeekOrigin) | Устанавливает указатель текущей позиции в потоке в заданное положение |
Unlock(ByVal position As Long, ByVal length As Long) | Снимает блокировку с ранее заблокированной части файла (нумерация позиций начинается с нуля) |
Write(ByVal array() As Byte, ByVal offset As Integer, ByVal count As Integer) | Записывает заданное количество байт из массива в файловый поток начиная с заданной позиции |
WriteByte | Записывает байт в текущую позицию файлового потока |