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;
}