Класс TFileStream

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

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

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

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

· fmCreate - файл создается;

· fmOpenRead - файл открывается для чтения;

· fmopenwrite - файл открывается для записи;

· fmOpenReadWrite — файл открывается для чтения и записи.

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

· fmShareExciusive - файл недоступен для открытия другими приложениями;

· fmShareDenyWrite - другие приложения могут читать данные из файла;

· fmShareDenyRead - другие приложения могут писать данные в файл;

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

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

procedure TForm2.Button1Click(Sender: TObject);

var Stream1, Stream2: TFileStream;

IntBuf: array[0..9] of Integer;

Begin

if Not OpenDlg.Execute then Exit;

Try

Stream1:=TFileStream.Create(OpenDlg.FileName, fmOpenRead);

Stream1.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

Stream1.Free;

end;

end;

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

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

procedure TForm2.Button1Click(Sender: TObject);

var Stream1, Stream2: TFileStream;

begin

if Not OpenDlg.Execute then Exit;

Try

Stream1:= TFileStream.Create(OpenDlg.FileName, fmOpenRead);

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

Stream2.Seek(0, soFromEnd);

Stream2.CopyFrom(Stream1, Stream1.Size);

Finally

Streaml.Free;

Stream2.Free;

end;

end;

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: