Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];

Вниз

Перекрыл 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.223 c
1-1121511757
Kreyl
2005-07-16 15:02
2005.08.07
Access Violation при использовании DATA MODULE


4-1118239228
PIF
2005-06-08 18:00
2005.08.07
Права администратора


14-1121257857
Digitman
2005-07-13 16:30
2005.08.07
IntraWeb + JavaScript


14-1121689486
Koala
2005-07-18 16:24
2005.08.07
Погиб Анатолий Дяченко - актер, телеведущий


5-1092240061
xman
2004-08-11 20:01
2005.08.07
TreeView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский