Sample code for 30+ languages & platforms
Go

File Read Blocks

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

Chilkat Go Downloads

Go
    success := false

    // 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.

    var dataBlock []byte

    facSrc := chilkat.NewFileAccess()
    facDest := chilkat.NewFileAccess()

    srcPath := "qa_data/xml/hamlet.xml"
    destPath := "qa_output/hamletOut.xml"

    success = facSrc.OpenForRead(srcPath)
    success = facDest.OpenForWrite(destPath)
    // Assuming success for the example..

    // How many 1024-byte blocks?  (Including 1 for the last partial block)
    numBlocks := facSrc.GetNumBlocks(1024)

    i := 0
    for (i < numBlocks) {
        dataBlock = facSrc.ReadBlock(i,1024)
        if facSrc.LastMethodSuccess() != true {
            fmt.Println(facSrc.LastErrorText())
            facSrc.DisposeFileAccess()
            facDest.DisposeFileAccess()
            return
        }

        success = facDest.FileWrite(dataBlock)
        if success != true {
            fmt.Println(facDest.LastErrorText())
            facSrc.DisposeFileAccess()
            facDest.DisposeFileAccess()
            return
        }

        i = i + 1
    }

    facSrc.FileClose()
    facDest.FileClose()

    bEqual := facSrc.FileContentsEqual(srcPath,destPath)
    if bEqual != true {
        fmt.Println("Something went wrong!")
        facSrc.DisposeFileAccess()
        facDest.DisposeFileAccess()
        return
    }

    fmt.Println("File successfully copied by blocks.")

    facSrc.DisposeFileAccess()
    facDest.DisposeFileAccess()