2012-05-28 2 views
1

클라이언트에서 zip 파일을받는 서버를 작성하고 파일의 압축을 풉니 다. zip 파일을 받으면 메모리에 저장합니다.C의 메모리에 이미로드 된 zip 파일을 압축 해제하는 방법은 무엇입니까?

zlib과 minizip과 같은 zip 파일을 업 그레 이드 할 수있는 라이브러리를 찾았지만 모두 메모리에서가 아니라 디스크에 파일이 압축 해제되어 있습니다.

파일을 디스크에 저장하고 추출하는 것을 원하지 않습니다. 효율적이지 않습니다.

파일을 메모리에서 압축 해제하는 방법은 무엇입니까? Windows에 C 및 C++을 씁니다.

+0

이 StackOverflow의 질문에 대한 답변을 확인하시기 바랍니다 : 메모리에 아카이브를 추출

예 http://stackoverflow.com/questions/5303741/best-api-to-unzip-a-file-into -기억. –

+0

Qt를 사용하지 않고 quazip은 Qt와 관련이 있습니다. – Celebi

답변

1

zlib은 메모리 내 inflate() 및 deflate() 함수를 지원합니다. 당신은 here

+4

이지만 zlib은 .zip 형식을 지원하지 않습니다. – Celebi

+0

@Celebi : .zip 형식을 지원하지 않는다는 것은 무엇을 의미합니까? 그것은 zip 형식을 처리하기 위해 만들어졌습니다. 작동하지 않으면 헤더를 확인하십시오. 아마도 확장자가 .zip이라하더라도 실제로 사용되는 압축 알고리즘은 lzma 또는 다른 것입니다. – LeleDumbo

+2

@LeleDumbo zlib의 FAQ에 따르면 .zip 아카이브를 처리하지 못한다고합니다. "zlib 배포판의 contrib/minizip 디렉토리보기". minizip은 메모리가 아닌 파일의 .zip 아카이브를 처리합니다. – Celebi

2

에서 그것은 압축 형식을 지원 libarchive 를 살펴 보자 방법을 읽을 수 있습니다.

struct archive *a = archive_read_new(); 
archive_read_support_compression_gzip(a); 
archive_read_support_format_tar(a); 
r = archive_read_open_memory(a, buff, sizeof(buff)); 
관련 문제