Sample code for 30+ languages & platforms
Visual FoxPro

File Read Blocks

Demonstrates how to read a file in fixed-size blocks (except for the very last block).

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loDataBlock
LOCAL loFacSrc
LOCAL loFacDest
LOCAL lcSrcPath
LOCAL lcDestPath
LOCAL lnNumBlocks
LOCAL i
LOCAL lnBEqual

lnSuccess = 0

* Demonstrates how to read a file in blocks,
* which can be useful when uploading to cloud storage
* services such as Azure, S3, Google, etc.

* For this example, we're simply writing the blocks
* to an output file, and then checking to see if the
* resulting file contents equals the original file contents.

loFacSrc = CreateObject('Chilkat.FileAccess')
loFacDest = CreateObject('Chilkat.FileAccess')

lcSrcPath = "qa_data/xml/hamlet.xml"
lcDestPath = "qa_output/hamletOut.xml"

lnSuccess = loFacSrc.OpenForRead(lcSrcPath)
lnSuccess = loFacDest.OpenForWrite(lcDestPath)
* Assuming success for the example..

* How many 1024-byte blocks?  (Including 1 for the last partial block)
lnNumBlocks = loFacSrc.GetNumBlocks(1024)

i = 0
DO WHILE (i < lnNumBlocks)
    loDataBlock = loFacSrc.ReadBlock(i,1024)
    IF (loFacSrc.LastMethodSuccess <> 1) THEN
        ? loFacSrc.LastErrorText
        RELEASE loFacSrc
        RELEASE loFacDest
        CANCEL
    ENDIF

    lnSuccess = loFacDest.FileWrite(loDataBlock)
    IF (lnSuccess <> 1) THEN
        ? loFacDest.LastErrorText
        RELEASE loFacSrc
        RELEASE loFacDest
        CANCEL
    ENDIF

    i = i + 1
ENDDO

loFacSrc.FileClose()
loFacDest.FileClose()

lnBEqual = loFacSrc.FileContentsEqual(lcSrcPath,lcDestPath)
IF (lnBEqual <> 1) THEN
    ? "Something went wrong!"
    RELEASE loFacSrc
    RELEASE loFacDest
    CANCEL
ENDIF

? "File successfully copied by blocks."

RELEASE loFacSrc
RELEASE loFacDest