□ метод ReadComponent - для считывания значений свойств компонента.

Для записи ресурса в поток применяется метод writeComponentRes.

Класс THandleStream инкапсулирует поток, связанный с физическим носителем данных через дескриптор.

Для создания потока используется конструктор

constructor Create (AHandle: Integer) ;

в параметре которого передается дескриптор. Впоследствии доступ к дескриптору осуществляется через свойство:

property Handle: Integer;

Класс TFileStream

Класс TFileStream позволяет создать поток для работы с файлами. При этом поток работает с файлом без учета типа хранящихся в нем данных (см. выше).

Полное имя файла задается в параметре FileName при создании потока:

constructor Create (const FileName: string;
Mode: Word);

Параметр Mode определяет режим работы с файлом. Он составляется из флагов режима открытия:

□ fmCreate - файл создается;
□ firiOpenRead - файл открывается для чтения;
• fmOpenWrite - файл открывается для записи;

• fmOpenReadwrite - файл открывается для чтения и записи. И флагов режима совместного использования:

OfmShareExclusive - файл недоступен для открытия другими приложениями;
О fmShareDenyWrite - другие приложения могут читать данные из файла;
□ fmShareDenyRead - другие приложения могут писать данные в файл;

□ fmShareDenyNone - другие приложения могут производить с файлом любые операции.

Для чтения и записи из потока используются методы Read и write, унаследованные ОТ классаTHandleStream:

procedure TForml.CopyBtnClick (Sender: TDbject) ;
var Streaml, Stream2: TFileStream;

TritBuf: array[0..9] of Integer; begin if Not OpenDlg.Execute then Exit; try

Streaml := TFileStream.Create(OpenDlg.FileName, fmOpenRead);
Streaml.ReadBuffer(IntBuf, SizeOf(IntBuf));

try

Streanfi := TFileStream.Create('TextFile.tmp', fmOpenWrite);
Stream2.Seek(0, soFrcmEnd);
Stream2.WriteBuffer(IntBuf, SizeOf(IntBuf));
finally Stream2.Free;
end;
finally Streaml.Free;
end;
end;

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

При необходимости копирования одного файла в другой целиком используется метод copyFrom, унаследованный от класса Tstream:

procedure TForml.CopyBtnClick(Sender: TObject);
var Streaml, Stream2: TFileStream;
begin
if Not OpenDlg.Execute then Exit;

try

Streaml := TFileStream.Create(OpenDlg.FileName, fmOpenRead);
Stream2 := TFileStream.Create('Sample.tmp1, fmOpenWrite);
Stream2.Seek(0, soFromEnd);
Stream2.CopyFrom(Streaml, Streaml.Size);
finally Streaml.Free;
Stream2.Free;
end;
end;

Обратите внимание, что в данном случае для определения размера передаваемого потока необходимо использовать свойство stream, size, которое дает реальный объем данных, содержащихся в потоке. Функция sizeof(stream) в этом случае даст размер объекта потока, и не более того.

Класс TMemoryStream

Класс TMemoryStream обеспечивает сохранение данных в адресном пространстве. При этом методы доступа к этим данным остаются теми же, что и при работе с файловыми потоками. Это позволяет использовать адресное пространство для хранения промежуточных результатов работы приложения, а также при помощи стандартных методов осуществлять обмен данными между памятью и другими физическими носителями.


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Октябрь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс