64-bit FTP support
5 answers - 1590 bytes -

I've finished updating the ICS FTP client and server components to
support 64-bit streams and thus single files larger than 2 gigs, when
used with Delphi 6 and later.
The updated components may be downloaded from:
until they become available from the ICS site.
Large files can only be used in the client with TFileStream, since
THandleStream and TMemoryStream don't support sizes larger than 2 gigs,
and even that would probably cripple windows. LocalFileName mode
must be used if resume is needed above the 2 gig boundary, and this
proved a pain during testing because the integer overloaded Seek seemed
to be linked rather than int64 version, so I had to code my own Seek64
function. The client also includes a fix for FTP uploads of about 9K
or 10K sometimes being truncated.
The ICS 64-bit client has been tested against the ICS 64-bit server,
and against Windows 2000 IIS/5, with a 4.7 gig DVD image. Resumed
downloading was tested with Magenta Systems File Transfer Components
v1.4 (which should be available shortly on the ICS SSL site), download
resume above 2 gigs works against both FTP server, but FTP upload
resume only against the ICS server since IIS/5 seemed to delete the
partially upload file when stopped or the network cable pulled.
Both components are fully backward compatible, the only change with the
client is a new 64-bit progress event. FtpSrvT.pas has a number of new
64-bit support functions that applications may need, like GetFileSize64
and atoi64.
Angus
No.1 | | 330 bytes |
| 
Angus Robertson - Magenta Systems Ltd wrote:
I've finished updating the ICS FTP client and server components to
support 64-bit streams and thus single files larger than 2 gigs, when
used with Delphi 6 and later.
Great, things move!
Testing was probably a lengthy story with such large files ;-)
Arno
No.2 | | 593 bytes |
| 
Message
From: "Angus Robertson - Magenta Systems Ltd" <angus (AT) magsys (DOT) co.uk>
To: <twsocket (AT) elists (DOT) org>
Sent: Tuesday, September 06, 2005 4:45 PM
Subject: [twsocket] 64-bit FTP support
proved a pain during testing because the integer overloaded Seek seemed
to be linked rather than int64 version, so I had to code my own Seek64
function.
Are you sure you were using soBeginning, soEnd etc. instead of
soFromBeginning, soFromEnd.
I had this problem when I started using int64 streams and that was the
solution.
Dan
No.3 | | 1181 bytes |
| 
Angus Robertson - Magenta Systems Ltd wrote:
I've finished updating the ICS FTP client and server components to
support 64-bit streams and thus single files larger than 2 gigs, when
used with Delphi 6 and later.
The updated components may be downloaded from:
until they become available from the ICS site.
Angus, I took a brief look at your code (btw: I couldn't find it in
the new ICS Beta from yesterday).
Large files can only be used in the client with TFileStream, since
THandleStream and TMemoryStream don't support sizes larger than 2 gigs,
THandleStream supports it, at least in Delphi 7, TFileStream is derived
from THandleStream.
and even that would probably cripple windows. LocalFileName mode
must be used if resume is needed above the 2 gig boundary, and this
proved a pain during testing because the integer overloaded Seek seemed
to be linked rather than int64 version, so I had to code my own Seek64
function.
I think it can be simplified, without an own Seek64-function just by
a new custom integer type that would be of Type Int64 in D6 and above.
Arno Garrels
No.4 | | 288 bytes |
| 
I think it can be simplified, without an own Seek64-function just by
a new custom integer type that would be of Type Int64 in D6 and above.
Yes, that's what I told to Angus when I saw his code. Introducing this datatype would dramatically
reduce conditional compilation.
No.5 | | 453 bytes |
| 
Francois Piette wrote:
>I think it can be simplified, without an own Seek64-function just by
>a new custom integer type that would be of Type Int64 in D6 and above.
Yes, that's what I told to Angus when I saw his code. Introducing this
datatype would dramatically reduce conditional compilation.
You could probably simply overload GetFileSize() and DecodeMlsResp() as well.
Arno Garrels