Цитата:
Сообщение от poli-smen
Position начинается с нуля. Например имеем файл размером 1000 байт, значит Position=0 будет соответствовать самому первому байту файла, а Position=999 будет соответствовать последнему байту файла, но при Position=999 ещё можно прочесть этот самый один последний байт и тогда станет Position=1000 (за концом файла), что означает что файл закончился. Т.е. проверка на конец файла должна быть такая:
Код:
if FS.Position = FS.Size then ShowMessage('Достигнут конец файла');
// или для надёжности можно проверять на "больше или равно":
if FS.Position >= FS.Size then ShowMessage('Достигнут конец файла');
|
Почему?! У меня данные считываются блоками в цикле:
Код:
while 1=1 do begin
// сам шаблон не считываем, а пропускаем
if FS.Read(template1Length, SizeOf(template1Length)) <= 0 then break; // Сначала считываем размер данных
FS.Position := FS.Position + template1Length; // Пропускаем ненужный блок (вместо его чтения)
if FS.Position >= FS.Size-1 then break; // файл кончился
end;
Если я буду сравнивать FS.Position >= FS.Size, то у меня начнется новый виток цикла (из-за этого 1000 байта), который мне совершенно не нужен.
Например, 1000 байт, 5 блоков по 200 байт. Сделав 5 витков - Position будет равен 999, и проверка FS.Position >= FS.Size не сработает, и начнется 6 виток. Или я что-то не понимаю..