![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перекрыл Seek у TFileStream теперь не могу узнать Size :( [D5, Win95/98]
MegaVolt © (2005-07-20 17:51:00)свойство Size читается так:
function TStream.GetSize: Longint;
var
Pos: Longint;
begin
Pos := Seek(0, 1);
Result := Seek(0, 2);
Seek(Pos, 0);
end;
Чтобы его узнать выполняется перемещение в конец файла. Если Seek перекрыт то вызывается мой Seek с требование переместиться на конец файла. В моём случае я хочу пересчитать перемещение от конца в перемещение от начала. И для этого нужно знать размер файла. А размер файла неузнать без перемещения на конец файла. Получается замкнутый круг.
Что делать?
Как вариант можно конечно реализовать
function TStream.GetSize: Longint;
var
Pos: Longint;
begin
Pos := текущее положение (извесно);
Result :=inherited Seek(0, 2);
inherited Seek(Pos, 0);
end;
но как то на мой взгляд это некрасиво выглядит. Может есть другие способы узнать размер TFileStream?
MegaVolt (2005-07-21 12:50:00) [1]А чтобы его сохранить в переменную нужно его вначале узнать.
jack128 (2005-07-21 12:37:00) [2]хе. А если сохранить размер файла в переменной, то это будет еще быстрее ;)
MegaVolt (2005-07-21 12:28:00) [3]>просто используй inherited Seek там где те нужно рельное положение курсора в файле узнавать и все.
Ага я это выше и писал :) Но я думал есть другие решения например GetFileSize мне кажется будет быстрее работать чем двойное перемещение по файлу. Хотя это нужно проверить.
jack128 (2005-07-21 12:12:00) [4]MegaVolt © (21.07.05 11:29) [4]
когда я чем подобным занимался, но не припомню, чтобы были проблемы.. просто используй inherited Seek там где те нужно рельное положение курсора в файле узнавать и все.
MegaVolt (2005-07-21 11:29:00) [5]>Зачем ты перекрываешь Seek?
В моём компоненте есть внутренний буфер и Position не совпадает с Position реального физического файла. А Position вычисляется через Seek поэтому было решено его переопределить. Да и перемещение по файлу с учётом буфера отличается от оригинала.
jack128 (2005-07-21 00:39:00) [6]Зачем ты перекрываешь Seek?
Dok_3D (2005-07-20 21:20:00) [7]2 MegaVolt © (20.07.05 17:51)
Что делать?
Не перекрывать Seek. Будь послушным мальчиком. Я серьезно.
Fay (2005-07-20 19:57:00) [8]GetFileSize(DWORD(FHandle), ...