Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.07;
Скачать: CL | DM;

Вниз

Перекрыл Seek у TFileStream теперь не могу узнать Size :(   Найти похожие ветки 

 
MegaVolt ©   (2005-07-20 17:51) [0]

свойство 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?


 
Fay ©   (2005-07-20 19:57) [1]

GetFileSize(DWORD(FHandle), ...


 
Dok_3D ©   (2005-07-20 21:20) [2]

2 MegaVolt ©   (20.07.05 17:51)  
Что делать?

Не перекрывать Seek. Будь послушным мальчиком. Я серьезно.


 
jack128 ©   (2005-07-21 00:39) [3]

Зачем ты перекрываешь Seek?


 
MegaVolt ©   (2005-07-21 11:29) [4]

>Зачем ты перекрываешь Seek?

В моём компоненте есть внутренний буфер и Position не совпадает с Position реального физического файла. А Position вычисляется через Seek поэтому было решено его переопределить. Да и перемещение по файлу с учётом буфера отличается от оригинала.


 
jack128 ©   (2005-07-21 12:12) [5]

MegaVolt ©   (21.07.05 11:29) [4]
когда я чем подобным занимался, но не припомню, чтобы были проблемы..  просто используй inherited Seek там где те нужно рельное положение курсора в файле узнавать и все.


 
MegaVolt ©   (2005-07-21 12:28) [6]

>просто используй inherited Seek там где те нужно рельное положение курсора в файле узнавать и все.

Ага я это выше и писал :) Но я думал есть другие решения например  GetFileSize мне кажется будет быстрее работать чем двойное перемещение по файлу. Хотя это нужно проверить.


 
jack128 ©   (2005-07-21 12:37) [7]

хе. А если сохранить размер файла в переменной, то это будет еще быстрее ;)


 
MegaVolt ©   (2005-07-21 12:50) [8]

А чтобы его сохранить в переменную нужно его вначале узнать.



Страницы: 1 вся ветка

Текущий архив: 2005.08.07;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.038 c
1-1121327704
Apachi
2005-07-14 11:55
2005.08.07
Работа с большими целыми числами


14-1121535493
Piter
2005-07-16 21:38
2005.08.07
Помогите опознать фильм


11-1104578339
N0th!ng
2005-01-01 14:18
2005.08.07
Помогите с KOL!


14-1121179495
Кастусик
2005-07-12 18:44
2005.08.07
Хелп. При отладке в Дельфи виснет ХР


4-1118395724
!Trinix
2005-06-10 13:28
2005.08.07
Форма