Programming: Delphi


Иллюстрированный самоучитель по Delphi 7 для профессионалов



Класс TFileStream



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

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

    constructor Createfconst FileName: string; Mode: Word);

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

  •  fmCreate — файл создается;
  •  fmOpenRead — файл открывается для чтения;
  •  fmopenwrite — файл открывается для записи;
  •  fmOpenReadWrite — файл открывается для чтения и записи.

И флагов режима совместного использования:

  •  fmShareExciusive — файл недоступен для открытия другими приложениями;
  •  fmShareDenyWrite — другие приложения могут читать данные из файла; 
  •  fmShareDenyRead — другие приложения могут писать данные в файл;
  •  fmShareDenyNone — другие приложения могут производить с файлом любые операции.

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

    procedure TForml.CopyBtnClick(Sender: TObject);

     var Streaml, Stream2: TFileStream;

    IntBuf: 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

    Stream2 := TFileStream.Create('TextFile.tmp', fmOpenWrite); 

    Stream2.Seek(0, soFromEnd);

    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) в этом случае даст размер объекта потока, и не более того.




Назад | Оглавление | Вперёд




При перепечатке любого материала с сайта, видимая ссылка на источник www.warayg.narod.ru и все имена, ссылки авторов обязательны.

© 2005
 

Hosted by uCoz