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