PureBasic
PureBasic
Read Text at a 64-bit Offset from a Remote SFTP File
See more SFTP Examples
Demonstrates the Chilkat SFtp.ReadFileText64 method, which reads up to a number of bytes from a specific 64-bit byte offset of an open handle and decodes them to text. The arguments are the handle, the offset, the maximum number of bytes, and the charset. The 64-bit offset supports very large files.
Background: This is the large-file counterpart to reading at a 32-bit offset: use it whenever the position you need lies beyond the ~4 GB reach of a 32-bit integer, for example seeking into a multi-gigabyte archive or database file. Everything else about the read is the same.
Chilkat PureBasic Downloads
IncludeFile "CkSFtp.pb"
Procedure ChilkatExample()
success.i = 0
; Demonstrates the SFtp.ReadFileText64 method, which reads up to a number of bytes from a
; specific 64-bit byte offset of an open handle and decodes them to text. The 1st argument is
; the handle, the 2nd is the offset, the 3rd is the maximum number of bytes, and the 4th is the
; charset. The 64-bit offset supports very large files.
sftp.i = CkSFtp::ckCreate()
If sftp.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Connect, authenticate, and initialize the SFTP subsystem.
port.i = 22
success = CkSFtp::ckConnect(sftp,"sftp.example.com",port)
If success = 0
Debug CkSFtp::ckLastErrorText(sftp)
CkSFtp::ckDispose(sftp)
ProcedureReturn
EndIf
; Normally you would not hard-code the password in source. You should instead obtain it
; from an interactive prompt, environment variable, or a secrets vault.
password.s = "mySshPassword"
success = CkSFtp::ckAuthenticatePw(sftp,"mySshLogin",password)
If success = 0
Debug CkSFtp::ckLastErrorText(sftp)
CkSFtp::ckDispose(sftp)
ProcedureReturn
EndIf
success = CkSFtp::ckInitializeSftp(sftp)
If success = 0
Debug CkSFtp::ckLastErrorText(sftp)
CkSFtp::ckDispose(sftp)
ProcedureReturn
EndIf
handle.s = CkSFtp::ckOpenFile(sftp,"subdir/hugefile.dat","readOnly","openExisting")
If CkSFtp::ckLastMethodSuccess(sftp) = 0
Debug CkSFtp::ckLastErrorText(sftp)
CkSFtp::ckDispose(sftp)
ProcedureReturn
EndIf
; Read 6 bytes starting at a byte offset beyond the 32-bit (4 GB) range.
offset.i = 5000000000
numBytes.i = 6
text.s = CkSFtp::ckReadFileText64(sftp,handle,offset,numBytes,"utf-8")
If CkSFtp::ckLastMethodSuccess(sftp) = 0
Debug CkSFtp::ckLastErrorText(sftp)
CkSFtp::ckDispose(sftp)
ProcedureReturn
EndIf
Debug text
success = CkSFtp::ckCloseHandle(sftp,handle)
If success = 0
Debug CkSFtp::ckLastErrorText(sftp)
CkSFtp::ckDispose(sftp)
ProcedureReturn
EndIf
CkSFtp::ckDisconnect(sftp)
CkSFtp::ckDispose(sftp)
ProcedureReturn
EndProcedure