Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перекрыл 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), ...


Наверх

Титульная страница Поиск, карта сайта Написать письмо