Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Работа с файлами как с объектами в Delphi, абстрактный класс TStream. Примеры.




 

 В Delphi используется абстрактный класс TStream (поток данных), который является основой для работы с файлами как с объектами. В случае объектов совершенно не важно, что именно является носителем информации - дисковый ли файл, ленточный носитель или оперативная память. В специализированных потомках TStream определены стандартные методы Read, write и seek, открывающие полный доступ к файловому объекту. Сам объект создается конструктором и уничтожается деструктором.

 

 

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

 

В следующем примере файл с именем, хранящимся в Editl.Text,

 

копируется В файл Edit2 . Text.

 

procedure TFormI.CopyFileClick(Sender:TObject) ;

var

Streami, Stream2: TStream;

begin

Streami:=TFileStream.Create(Editi.Text,

fmOpenRead or fmShareDenyWrite) ;

try

Stream2 :=TFileStream.Create(Edit2.Text,

fmOpenCreate or fmShareDenyRead);

try

Stream2.CopyFrom(Streami, Streami.Size);

finally

Stream2.Free;

finally

Stream1.Free

end;

 

Абстрактный класс т Stream лишь декларирует ключевые методы Read и write, которые перекрываются в его наследниках для специализации операций:

 

TFileStream - обмен данными с файлом;

TStringStream - обмен данными с длинной строкой (в памяти);

TMemoryStream - обмен данными с памятью;

TBLOBStream - чтение/запись полей данных типа BLOB (Binary Large Object - большой двоичный объект;

TWinsocketStream - обмен данными с сокетным подключением;

TOLEStream - обмен данными в формате OLE.

Любой наследник получает в свое распоряжение метод copyFrom, с помощью которого он может прочитать содержимое другого потока. Таким способом можно, например, файловые данные расположить в памяти или наоборот - содержимое памяти записать в дисковый файл.

 

Точно так же от TStream наследуются множество других полезных методов, в том числе:

 

Seek - пропускает нужное количество байт от текущей позиции потока;

ReadBuffer - читает из буфера в поток нужное количество байт;

Readcomponent - читает свойства компонента из потока;

WriteBuffer - записывает в поток содержимое буфера заданной длины;

WriteComponent - записывает в поток свойства компонента.

Следующий обработчик bbRunciick выведет в редактор mmOutput свойства кнопки bbRun:

 

procedure TfmExample.bbRunClick(Sender: TObject);

 

var

MemSourceStream, MemDestStream: TMemoryStream;

begin

MemSourceStream := TMemoryStream.Create;

try

MemDestStream := TMemoryStream.Create;

try

MemSourceStream.WriteComponent(bbRun);

MemSourceStream.Seek(0, soFromBeginning) ;

ObjectBinaryToText(MemSourceStream, MemDestStream);

MemDestStream.Seek(0, soFromBeginning) ;

mmOutput.Lines.LoadFromStream(MemDestStream) finally

MemDestStream.Free

end;

finally

MemSourceStream.Free

end;

end;

 

Комментарий к программе

 

Вначале свойства компонента записываются в поток MеmSourceStream. Чтобы полученным таким образом двоичным данным придать “читабельный” вид, используется процедура ObjectBinaryToText, которая преобразует данные из MemSourceStream и помещает иx в MemDestStream. Содержимое этого второго потока и выводится










Последнее изменение этой страницы: 2018-04-12; просмотров: 273.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...