Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PowerBuilder) Decompress Large Text File in BlocksDecompresses a large text file in blocks, and compares the restored (decompressed) file with the original to make sure it's correct.
integer li_rc oleobject loo_Compress integer li_Success oleobject loo_Fac string ls_OriginalPath oleobject loo_FacSrc oleobject loo_FacDest integer li_BlockSize integer li_NumBlocks string ls_RestoredPath string ls_DecompressedStr integer i integer li_BEqualContents // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // First, let's compress a text file. // We'll then decompress in blocks, and compare the decompressed with the original file. // Compress a text file: loo_Compress = create oleobject // Use "Chilkat_9_5_0.Compression" for versions of Chilkat < 10.0.0 li_rc = loo_Compress.ConnectToNewObject("Chilkat.Compression") if li_rc < 0 then destroy loo_Compress MessageBox("Error","Connecting to COM object failed") return end if loo_Compress.Algorithm = "deflate" li_Success = loo_Compress.CompressFile("qa_data/hamlet.xml","qa_data/hamlet_compressed.dat") if li_Success <> 1 then Write-Debug loo_Compress.LastErrorText destroy loo_Compress return end if loo_Fac = create oleobject // Use "Chilkat_9_5_0.FileAccess" for versions of Chilkat < 10.0.0 li_rc = loo_Fac.ConnectToNewObject("Chilkat.FileAccess") // Examine the uncompressed and compressed sizes: ls_OriginalPath = "qa_data/hamlet.xml" // Note: The FileSize method returns a signed 32-bit integer. If the file is potentially larger than 2GB, call FileSizeStr instead to return // the size of the file as a string, then convert to an integer value. Write-Debug "uncompressed size: " + string(loo_Fac.FileSize(ls_OriginalPath)) Write-Debug "compressed size: " + string(loo_Fac.FileSize("qa_data/hamlet_compressed.dat")) // Decompress in blocks.. loo_FacSrc = create oleobject // Use "Chilkat_9_5_0.FileAccess" for versions of Chilkat < 10.0.0 li_rc = loo_FacSrc.ConnectToNewObject("Chilkat.FileAccess") loo_FacDest = create oleobject // Use "Chilkat_9_5_0.FileAccess" for versions of Chilkat < 10.0.0 li_rc = loo_FacDest.ConnectToNewObject("Chilkat.FileAccess") loo_FacSrc.OpenForRead("qa_data/hamlet_compressed.dat") // If we compress in 32K chunks, find out how many blocks there will be. li_BlockSize = 32768 li_NumBlocks = loo_FacSrc.GetNumBlocks(li_BlockSize) // Open an output file for the decompressed data. ls_RestoredPath = "qa_output/hamlet_restored.xml" li_Success = loo_FacDest.OpenForWrite(ls_RestoredPath) if li_Success <> 1 then Write-Debug loo_FacDest.LastErrorText destroy loo_Compress destroy loo_Fac destroy loo_FacSrc destroy loo_FacDest return end if i = 0 do while i < li_NumBlocks loo_CompressedBytes = loo_FacSrc.ReadBlock(i,li_BlockSize) if i = 0 then ls_DecompressedStr = loo_Compress.BeginDecompressString(loo_CompressedBytes) else ls_DecompressedStr = loo_Compress.MoreDecompressString(loo_CompressedBytes) end if loo_FacDest.AppendText(ls_DecompressedStr,"utf-8") i = i + 1 loop // At the very end, flush any remaining content, if any. ls_DecompressedStr = loo_Compress.EndDecompressString() loo_FacDest.AppendText(ls_DecompressedStr,"utf-8") loo_FacSrc.FileClose() loo_FacDest.FileClose() // Examine the size of the restored file. Write-Debug "restored size: " + string(loo_Fac.FileSize(ls_RestoredPath)) // Compare the contents of the original with the restored. li_BEqualContents = loo_Fac.FileContentsEqual(ls_RestoredPath,ls_OriginalPath) Write-Debug "Contents Equal: " + string(li_BEqualContents) destroy loo_Compress destroy loo_Fac destroy loo_FacSrc destroy loo_FacDest |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.