gzip 编码一个文件


BOOL gzip_encode_file(HANDLE hFile, WriteFunction fnDataCbk)
{
	z_stream strm;
	memset(&strm, 0, sizeof(strm));

	int ret = deflateInit(&strm, Z_DEFAULT_COMPRESSION);
	if (ret != Z_OK) {
		return FALSE;
	}

	DWORD dwRead = 0;
	int flush;
	unsigned int have;
    byte in[nCHUNK];
    byte out [nCHUNK];

	do
	{
		BOOL bSuccRead = 0;
		strm.avail_in = fread(hFile, in, nCHUNK, &bSuccRead);
		if (!bSuccRead) {
			deflateEnd(&strm);
			return FALSE;
		}

		flush = feof(hFile) ? Z_FINISH : Z_SYNC_FLUSH;
		strm.next_in = in;

		/* run deflate() on input until input aval is 0, finish
		   compression if all of source has been read in */
		do {
			strm.avail_out = nCHUNK;
			strm.next_out = out;
			ret = deflate(&strm, flush);    /* no bad return value */
			assert(ret != Z_STREAM_ERROR);  /* state not clobbered */
			have = nCHUNK - strm.avail_out;
			{
				if (fnDataCbk(out, have) != have)
				{
					deflateEnd(&strm);
					return FALSE;
				}
			}

		} while (strm.avail_in > 0);
		assert(strm.avail_in == 0);     /* all input will be used */

		/* done when last data in file processed */
	} while (flush != Z_FINISH);

	assert(ret == Z_STREAM_END);        /* stream will be complete */

	/* clean up and return */
	deflateEnd(&strm);
	return TRUE;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值