Главная страница
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.047 c
14-1121436564
DiamondShark
2005-07-15 18:09
2005.08.07
Пятница.


1-1121749139
Big Joe
2005-07-19 08:58
2005.08.07
Помогите с *.txt файлом


14-1121752401
SLP
2005-07-19 09:53
2005.08.07
Графический компонент для отображения направления и силы ветра


14-1120783826
АНТИСПАММЕР
2005-07-08 04:50
2005.08.07
Карта Земли GoogleEarth


14-1121313091
Soft
2005-07-14 07:51
2005.08.07
Во Второй Мировой Войне виноват Советский Союз.