예제 #1
0
bool ZipPlatform::GetFileSize(LPCTSTR lpszFileName, ZIP_U32_U64& dSize)
{
    CZipFile f;
    if (!f.Open(lpszFileName, CZipFile::modeRead | CZipFile::shareDenyWrite, false))
        return false;
    bool ret;
    try
    {
        ZIP_FILE_USIZE size = f.GetLength();
        // the file may be too large if zip64 is not enabled
        ret = size <= ZIP_U32_U64(-1);
        if (ret)
            dSize = (ZIP_U32_U64)size;
    }
#ifdef ZIP_ARCHIVE_MFC
    catch(CZipBaseException* e)
    {
        e->Delete();
        ret = false;
    }
#else
    catch(CZipBaseException e)
    {
        ret = false;
    }
#endif

    try
    {
        f.Close();
    }
#ifdef ZIP_ARCHIVE_MFC
    catch(CZipBaseException* e)
    {
        e->Delete();
    }
#else
    catch(CZipBaseException e)
    {
    }
#endif

    return ret;
}
void PosLmUnzipUtil::UnzipFileL(RFs& aFs, TFileName* aFileName) 
{
	CZipFile* zipFile = NULL;
	CZipFileMember* member = NULL;
	CZipFileMemberIterator* fileMembers = NULL;
	zipFile = CZipFile::NewL(aFs,*aFileName);
	CleanupStack::PushL(zipFile);
	User::LeaveIfError(zipFile->OpenL());
	fileMembers = zipFile->GetMembersL();
	CleanupStack::PushL(fileMembers);
	member = fileMembers->NextL();
	while (member) 
	{
	//You must take ownership of the member object created for you by NextL()!
	CleanupStack::PushL(member);
	ExtractFileL(aFs, member, zipFile, aFileName);
	
	CleanupStack::PopAndDestroy(); //member
	member = fileMembers->NextL();
	}
	zipFile->Close();
	CleanupStack::PopAndDestroy(2); //fileMembers, zipFile
}