Показать сообщение отдельно
  #10  
Старый 25.11.2013, 16:25
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от 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('Достигнут конец файла');
Ответить с цитированием