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
(Perl) 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.
use chilkat(); # 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: $compress = chilkat::CkCompression->new(); $compress->put_Algorithm("deflate"); $success = $compress->CompressFile("qa_data/hamlet.xml","qa_data/hamlet_compressed.dat"); if ($success != 1) { print $compress->lastErrorText() . "\r\n"; exit; } $fac = chilkat::CkFileAccess->new(); # Examine the uncompressed and compressed sizes: $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. print "uncompressed size: " . $fac->FileSize($originalPath) . "\r\n"; print "compressed size: " . $fac->FileSize("qa_data/hamlet_compressed.dat") . "\r\n"; # Decompress in blocks.. $facSrc = chilkat::CkFileAccess->new(); $facDest = chilkat::CkFileAccess->new(); $facSrc->OpenForRead("qa_data/hamlet_compressed.dat"); # If we compress in 32K chunks, find out how many blocks there will be. $blockSize = 32768; $numBlocks = $facSrc->GetNumBlocks($blockSize); # Open an output file for the decompressed data. $restoredPath = "qa_output/hamlet_restored.xml"; $success = $facDest->OpenForWrite($restoredPath); if ($success != 1) { print $facDest->lastErrorText() . "\r\n"; exit; } $compressedBytes = chilkat::CkByteData->new(); $i = 0; while ($i < $numBlocks) { $success = $facSrc->ReadBlock($i,$blockSize,$compressedBytes); if ($i == 0) { $decompressedStr = $compress->beginDecompressString($compressedBytes); } else { $decompressedStr = $compress->moreDecompressString($compressedBytes); } $facDest->AppendText($decompressedStr,"utf-8"); $i = $i + 1; } # At the very end, flush any remaining content, if any. $decompressedStr = $compress->endDecompressString(); $facDest->AppendText($decompressedStr,"utf-8"); $facSrc->FileClose(); $facDest->FileClose(); # Examine the size of the restored file. print "restored size: " . $fac->FileSize($restoredPath) . "\r\n"; # Compare the contents of the original with the restored. $bEqualContents = $fac->FileContentsEqual($restoredPath,$originalPath); print "Contents Equal: " . $bEqualContents . "\r\n"; |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.