Шаг 49 - Класс TFileStream. Понятие потока VCL.

Вот мы и дошли до этого класса. Сначала я бы хотел бы дать некоторое вступление по поводу поточных классов VCL. Эти классы есть некоторое подобие альтернативы поточным классам C++. Как обычно в таких случаях с VCL, основной TStream класс никто впрямую не использует, от него можно только наследовать. Прямым потомком TStream является класс THandleStream, который некоторым образом интегрирован с оболочкой (я в смысле - Виндовсом). Дело в том, что в WinAPI есть такая категория функций, которые выдают (или используют в качестве параметра) дескрипторп потока. Как раз таким дескриптором и обладает класс THandleStream. Как обычно, все функции, предоставляемые API, довольно сложны в использовании, и загромождают программу ненужными ухищрениями. Поэтому и был создан этот самый класс.

Собственно от THandleStream произведен только класс TFileStream. Остальные из категории поточных произведены от TStream. Ну, мы рассматриваем TFileStream, так что этим и займемся.

Handle

Свойство, унаследованное от THandleStream. Определяет дескриптор потока. Этот дескриптор используется в вызовах функций WinApi. А, еще про WinAPI. Вот, мне писал один человек, как бы это получить активность с COM-порта. В принципе активность можно получить с любого порта, LPT, RS232 или еще чего. Правда последний - тот же COM в более современном исполнении. Есть такая функция WaitCommEvent. В данном случае Comm - не ошибка, а аббревиатура communication device.

Так вот, она через Handle порта позволяет ждать от него активности. Для нее наш дескриптор тоже подходит. Создавать файл нужно как одно из имен типа COM1, COM2, COM3, LPT1 и так далее. Для связи с VxD устройствами необходим путь типа "\\.\a". Последний открывает дескриптор для дисковода [a:]. Связь с портами - довольно обширная тема. Поэтому я рассмотрю ее позже.

Size

Содержит информацию о размере потока (в байтах). Можно установить это свойство для того, чтобы "обрезать" поток. Должен заметить, что не рекомендуется использовать это свойство с портами и именованными pipe. Pipe - механизм, обеспечивающий двунаправленный поток, туннель данных между процессами.

Position

Свойство, определяющее текущую позицию указателя потока. Более четко - количество считанных байтов от начала потока.

Теперь нужно и методы рассмотреть.

Конструктор TFileStream

Этот конструктор использует два параметра - имя создаваемого файла (AnsiString) и режим открытия. режим открытия задает типы операций и права доступа, применимые к данному объекту. Могут быть следующие значения, комбинируемые с помощью binary or оператора "|".

Read, Write, Seek

Первые два в качестве параметра используют преременную void* и целое, определяющее длину считываемой/записываемой порции данных. Ну а Seek вообще очень похоже на fseek. Вот примеры использования функции:

TFileStream* stream=new TFileStream("c:\\test.txt",fmOpenReadWrite|fmShareExclusive)
//на всякий случай займем этот файл как эксклюзив ;)
stream->Seek(0,soFromBeginning);

В общем-то ничего другого и нет. Пример использования TFileStream будет дан в следующем шаге.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Аванесов Самвел - 17.01.2002