Распаковка gzip (взято отсюда - http://www.rsdn.ru/forum/winapi/2171857.flat.aspx):
Код:
BOOL WINAPI DecompressFile(HANDLE hArchFile, HANDLE hPlainFile)
{
HRESULT rc;
IEncodingFilterFactory* pEflt=NULL;
IDataFilter* pDF=NULL;
BOOL bOK=TRUE;
rc = CoCreateInstance( CLSID_StdEncodingFilterFac, NULL, CLSCTX_INPROC_SERVER, IID_IEncodingFilterFactory, (LPVOID *) &pEflt);
if( FAILED(rc) )
return FALSE;
pEflt->GetDefaultFilter(_T("gzip"), _T("text"), &pDF);
if (pDF)
{
BYTE in_buff[32768];
BYTE out_buff[32768];
DWORD rdd=0;
DWORD wrt=0;
LONG proc=0;
LONG outpt=0;
__int64 filesize=0;
__int64 processed=0;
GetFileSizeEx(hArchFile, (PLARGE_INTEGER)&filesize);
while (processed<filesize)
{
SetFilePointerEx(hArchFile, *((PLARGE_INTEGER)&processed), NULL, FILE_BEGIN);
ReadFile(hArchFile, in_buff, sizeof(in_buff), &rdd, NULL);
rc=pDF->DoDecode(0, sizeof(in_buff), in_buff, sizeof(out_buff), out_buff, rdd, &proc, &outpt, 0);
if (FAILED(rc))
{
bOK=FALSE;
break;
}
WriteFile(hPlainFile, out_buff, outpt, &wrt, NULL);
processed+=proc;
}
do
{
rc=pDF->DoDecode(0, sizeof(in_buff), in_buff, sizeof(out_buff), out_buff, 0, &proc, &outpt, 0);
if (FAILED(rc))
{
bOK=FALSE;
break;
}
WriteFile(hPlainFile, out_buff, outpt, &wrt, 0);
}while(outpt>0);
pDF->Release();
pEflt->Release();
return bOK;
}
pEflt->Release();
return FALSE;
}