21.10.2013, 03:27
|
Прохожий
|
|
Регистрация: 06.01.2011
Сообщения: 25
Репутация: 10
|
|
TFileStream запись в конец файла
Доброго времени суток, эксперты!Возникла совершенно дурацкая проблема, на первый взгляд.Сериализую объекты в файл.Делается это в разные промежутки времени.И вместо того, чтобы каждый раз писать в конец файла, не удаляя содержимое, программа пишет поверх содержимого.Никак не могу понять, в чем ошибка.Заранее спасибо за помощь.
Код:
type
TObraz = class
X: array [1..49] of Integer; //вектор входного образа еще надо добавить сюда вектор "желаемый выход"
T: array [1..4] of Integer; //Желаемый выход
sq:string; //////////////////////////////////////////////////////////////
constructor Create(STrGrd: TStringGrid; Col, Row, I, II, III, IIII: Integer; st:string); //тут будет сериализация\десериализация и побитный парсинг Грида.
procedure WriteToFile();
//также можно добавить строковое поле "имя образа"
end;
implementation
{ TObraz }
//I, II, III, IIII - желаемые выходы, передаваемые с формы
constructor TObraz.Create(STrGrd: TStringGrid; Col, Row, I, II, III, IIII: Integer; st:string);
var u,j,k,flag:Integer;
begin
k:=1;
for u := 0 to Row-1 do
begin
for j := 0 to Col-1 do
begin
//Читаем значение флага, которое записано под видом указателя на объект.
Flag := Integer(STrGrd.Rows[u].Objects[j]);
if Flag = 0 then X[k]:=0
else
if flag=1 then X[k]:=1;
Inc(k);
end;
end;
//заполняем массив желаемых выходов для данного образа
T[1]:=I;
T[2]:=II;
T[3]:=III;
T[4]:=IIII;
sq:=st;//////////////////////////////////////////////////
end;
procedure TObraz.WriteToFile;
var
F: TFileStream;
i:Integer;
begin
F:=TFileStream.Create('Obr.txt', fmCreate or fmOpenReadWrite);
F.Seek(0, soFromEnd);
for i := 1 to High(X) do
F.WriteBuffer(X[i], SizeOf(X[i]));
for i := 1 to High(T) do
F.WriteBuffer(T[i], SizeOf(T[i]));
F.WriteBuffer(Pointer(sq)^, Length(sq)); /////////////////////////////////////////
FreeAndNil(F);
end;
|