Цитата:
Сообщение от kti
Да, это я неправильно написал. Решил проблему через следующую конструкцию:
Код:
if FileExists(Param1 + Name_DB) then begin
FS := TFileStream.Create(Param1 + Name_DB, fmOpenReadWrite);
FS.Seek(0, soFromEnd); // можно было FS.Position := FS.Size
end
else begin
FS := TFileStream.Create(Param1 + Name_DB, fmCreate);
end;
|
Если делать через "Seek", тогда уже лучше не "Seek(0, soFromEnd)", а "Seek(0, soEnd)". А так особой разницы нет - свойство "Position" основано на методе "Seek".
Цитата:
Сообщение от kti
здесь Position начинается с нуля? тогда наверно if TS.Position >= TS.Size-1 then ... файл кончился
Так?
|
Position начинается с нуля. Например имеем файл размером 1000 байт, значит Position=0 будет соответствовать самому первому байту файла, а Position=999 будет соответствовать последнему байту файла, но при Position=999 ещё можно прочесть этот самый один последний байт и тогда станет Position=1000 (за концом файла), что означает что файл закончился. Т.е. проверка на конец файла должна быть такая:
Код:
if FS.Position = FS.Size then ShowMessage('Достигнут конец файла');
// или для надёжности можно проверять на "больше или равно":
if FS.Position >= FS.Size then ShowMessage('Достигнут конец файла');