Piotr Dałek wrote:
> Hello!
> 
>>>>>> A reliable way to calculate More was
>>>>>> "More := Stream.Position < Stream.Size;"
>>>>>> 
>>>>>> however that is slower since Stream.Size has to seek to the end
>>>>>> of the stream and the back to current position on each call of
>>>>>> DoFileEncBase64(). (Instead of Stream.Size we could also check
>>>>>> against file size, however only with ShareMode fmShareDenyWrite).
>>>>> 
>>>>> var
>>>>>  LocalStreamSize: integer;
>>>>> [..]
>>>>> LocalStreamSize := Stream.Size;
>>>>> [..]
>>>>> More := Stream.Position < LocalStreamSize;
>>>>> [..]
>>>>> 
>>>>> Problem solved.
>>> 
>>>> I do not get this, sorry. Please elaborate.
>>> 
>>> Get the stream size only once - store it somewhere and use stored
>>> value instead of calling Stream.Size getter.
> 
>> OK, but what will happen if the stream size changes during encoding,
>> if for instance the component user opened the file with ShareMode
>> fmShareDenyRead? 
> 
>> That's why I added public property Mode to the TBufferedFileStream
>> class and 
>> check the ShareMode in DoFileEncBase64,. in case of no problem
>> TBufferedFileStream(Stream).FastSize is called (which is current,
>> constant size), otherwise Stream.Size (which is slow, but who will
>> actually open a file to be sent with ShareMode fmShareDenyRead only
>> ? I guess not many). 
> 
> The only reason for this is creating attachment (file to be encoded)
> while 
> it is actually encoded, but then, using the mechanism available in
> ICS is a 
> waste of disk space (already encoded original data still reside on
> disk). 
> I think that all users will use simple files containing ready data
> that is 
> not going to be changed during encode process. Supporting other
> scenarions 
> is overkill, at least for me. If you don't agree, then what if you
> buffer 
> (in TBufferedFileStream) 1024 bytes, encode first 50, then (somehow)
> next 
> 100 bytes changes? You still have outdated 100 bytes in the buffer.
> Then 
> what? Bug, no matter what! 
> So why should you care about size change,
> if 
> you don't care about actual file changes? I don't think that you're
> going 
> to support *that* scenario.

True :) But unfortunately it is possible to set fmShareDenyRead and 
fmShareDenyNone:( I wish there were just two ShareModes provided, 
fmShareDenyWrite and fmShareExclusive. 

--
Arno Garrels
 
> --
> Piotr Dałek
> enigmati...@interia.pl
> 
> ----------------------------------------------------------------------
> Promocja w Speak Up. 3 miesiace angielskiego gratis.
> Sprawdz teraz i wypelnij formularz! >> http://link.interia.pl/f2019
-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Reply via email to