View a printable version of the current page.
  Wiki > Symbian Developer Network Public Wiki > ... > Example source code > Compress or decompress file with gzip
  Compress or decompress file with gzip
Added by alie, last edited by rodders on Feb 15, 2008  (view change)
Labels: 
(None)

Compress function
void CMyClass::Compress(const TDesC aFileName, TInt aCompressionMethod)
	{
	TInt compressionMethod = 0;
	if(aCompressionMethod == 0)
		compressionMethod = Z_DEFAULT_COMPRESSION;
	else if(aCompressionMethod == 1)
		compressionMethod = Z_NO_COMPRESSION;
	else if(aCompressionMethod == 2)
		compressionMethod = Z_BEST_SPEED;
	else if(aCompressionMethod == 3)
		compressionMethod = Z_BEST_COMPRESSION;
	else
		compressionMethod = Z_DEFAULT_COMPRESSION;

	TBuf<256> target;
	target.Copy(aFileName);
	target.Append(_L(".gz"));
	iFs->SetSessionPath(path);
	RFile problemFile;

	TInt fileSize;
	problemFile.Open(*iFs, aFileName,EFileRead|EFileWrite|EFileShareAny|EFileStreamText);
	problemFile.Size(fileSize);
	HBufC8* tempBufferPtr = HBufC8::NewLC(fileSize);
	TPtr8 unCompressed( tempBufferPtr->Des());
	problemFile.Read(unCompressed);

	HBufC8* iCompressed=HBufC8::NewLC(fileSize * 2); // allocating space for output
	TPtr8 ptrCompressed=iCompressed->Des();
	CEZCompressor* iCompressor=CEZCompressor::NewLC(*this, compressionMethod);
	TRAPD(err, iCompressor->CompressL(ptrCompressed,unCompressed));

	if(err == KErrNone)
		{
		problemFile.Close();
		if((problemFile.Replace(*iFs,target,EFileWrite))==KErrNone )
			{
			problemFile.Write(ptrCompressed);
			}
		}
	else
		{
                // Error :p
		}

	problemFile.Close();
	CleanupStack::PopAndDestroy(3);
	}
Decompress
void CMyClass::Decompress(const TDesC aFileName)
	{
	TBuf<5> ext;
	TBuf<256> target;
	ext.Copy(aFileName.Right(3));
	ext.LowerCase();

	if(ext == _L(".gz"))
		target.Copy(aFileName.Left(aFileName.Length() - 3));
	else
		target.Copy(aFileName);

	iFs->SetSessionPath(path);
	RFile problemFile;

	TInt fileSize;
	problemFile.Open(*iFs, aFileName, EFileRead|EFileWrite|EFileShareAny|EFileStreamText);
	problemFile.Size(fileSize);
	HBufC8* iCompressed=HBufC8::NewLC(fileSize); // allocating space for output
	TPtr8 ptrCompressed=iCompressed->Des();
	problemFile.Read(ptrCompressed);

	HBufC8* ideCompressed=HBufC8::NewLC(1000000);
	TPtr8 ptrdeCompressed=ideCompressed->Des();
	CEZDecompressor* iDecompressor=CEZDecompressor::NewLC(*this);
	TRAPD(err, iDecompressor->DecompressL(ptrdeCompressed,ptrCompressed));

	if(err == KErrNone)
		{
		problemFile.Close();
		if((problemFile.Replace(*iFs,target,EFileWrite))==KErrNone )
			{
			problemFile.Write(ptrdeCompressed);
			}
		}
	else
		{
                // Error :p
		}

	problemFile.Close();
	CleanupStack::PopAndDestroy(3);
	}
Interactive Services Terms & Conditions of use | Terms of use | Privacy policy | Media Center | Contact us | © 2008 Symbian